rsocket-rust is an implementation of the RSocket protocol in Rust(1.39+). It's an alpha version and still under active development. Do not use it in a production environment!
Here are some example codes which show how RSocket works in Rust.
Add dependencies in your Cargo.toml
.
[dependencies] tokio = "0.2" rsocket_rust = "*" # choose transport: # rsocket_rust_transport_tcp = "*" # rsocket_rust_transport_websocket = "*"
#[macro_use] extern crate log; use rsocket_rust::prelude::*; use rsocket_rust_transport_tcp::TcpServerTransport; use std::env; use std::error::Error; #[tokio::main] async fn main() -> Result<(), Box<dyn Error + Send + Sync>> { env_logger::builder().format_timestamp_millis().init(); let addr = env::args().nth(1).unwrap_or("127.0.0.1:7878".to_string()); RSocketFactory::receive() .transport(TcpServerTransport::from(addr)) .acceptor(Box::new(|setup, _socket| { info!("accept setup: {:?}", setup); Ok(Box::new(EchoRSocket)) // Or you can reject setup // Err(From::from("SETUP_NOT_ALLOW")) })) .on_start(|| info!("+++++++ echo server started! +++++++")) .serve() .await }
use rsocket_rust::prelude::*; use rsocket_rust_transport_tcp::TcpClientTransport; #[tokio::main] #[test] async fn test() { let cli = RSocketFactory::connect() .acceptor(Box::new(|| Box::new(EchoRSocket))) .transport(TcpClientTransport::from("127.0.0.1:7878")) .setup(Payload::from("READY!")) .mime_type("text/plain", "text/plain") .start() .await .unwrap(); let req = Payload::builder() .set_data_utf8("Hello World!") .set_metadata_utf8("Rust") .build(); let res = cli.request_response(req).await.unwrap(); println!("got: {:?}", res); cli.close(); }
- Operations
- METADATA_PUSH
- REQUEST_FNF
- REQUEST_RESPONSE
- REQUEST_STREAM
- REQUEST_CHANNEL
- More Operations
- Error
- Cancel
- Fragmentation
- Resume
- Keepalive
- QoS
- RequestN
- Lease
- Transport
- TCP
- Websocket
- WASM
- Reactor
- ...
- High Level APIs
- Client
- Server