[−][src]Crate fibers_rpc
RPC library built on top of fibers crate.
Features
- Asynchronous RPC server/client using fibers crate
- Support two type of RPC:
- Request/response model
- Notification model
- Strongly typed RPC using bytecodec crate
- You can treat arbitrarily Rust structures that support serde as RPC messages
- It is possible to handle huge structures as RPC messages without compromising efficiency and real-time property by implementing your own encoder/decoder
- Multiplexing multiple RPC messages in a single TCP stream
- Prioritization between messages
- Expose Prometheus metrics
Technical Details
See doc/.
Examples
Simple echo RPC server:
use bytecodec::bytes::{BytesEncoder, RemainingBytesDecoder}; use fibers_rpc::{Call, ProcedureId}; use fibers_rpc::client::ClientServiceBuilder; use fibers_rpc::server::{HandleCall, Reply, ServerBuilder}; use futures::Future; // RPC definition struct EchoRpc; impl Call for EchoRpc { const ID: ProcedureId = ProcedureId(0); const NAME: &'static str = "echo"; type Req = Vec<u8>; type ReqEncoder = BytesEncoder<Vec<u8>>; type ReqDecoder = RemainingBytesDecoder; type Res = Vec<u8>; type ResEncoder = BytesEncoder<Vec<u8>>; type ResDecoder = RemainingBytesDecoder; } // RPC server struct EchoHandler; impl HandleCall<EchoRpc> for EchoHandler { fn handle_call(&self, request: <EchoRpc as Call>::Req) -> Reply<EchoRpc> { Reply::done(request) } } let server_addr = "127.0.0.1:1919".parse().unwrap(); let mut builder = ServerBuilder::new(server_addr); builder.add_call_handler(EchoHandler); let server = builder.finish(fibers_global::handle()); fibers_global::spawn(server.map_err(|e| panic!("{}", e))); // RPC client let service = ClientServiceBuilder::new().finish(fibers_global::handle()); let service_handle = service.handle(); fibers_global::spawn(service.map_err(|e| panic!("{}", e))); let request = Vec::from(&b"hello"[..]); let response = EchoRpc::client(&service_handle).call(server_addr, request.clone()); let response = fibers_global::execute(response)?; assert_eq!(response, request);
Modules
channel | RPC channel related components. |
client | RPC client. |
metrics | Prometheus metrics. |
server | RPC server. |
Structs
Error | This crate specific |
ProcedureId | The identifier of a procedure. |
Enums
ErrorKind | Possible error kinds. |
Traits
Call | Request/response RPC. |
Cast | Notification RPC. |
Type Definitions
Result | This crate specific |