fibers_rpc
Rust 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 ;
use ;
use ClientServiceBuilder;
use ;
use Future;
// RPC definition
;
// RPC server
;
let server_addr = "127.0.0.1:1919".parse.unwrap;
let mut builder = new;
builder.add_call_handler;
let server = builder.finish;
spawn;
// RPC client
let service = new.finish;
let service_handle = service.handle;
spawn;
let request = Vec from;
let response = client.call;
let response = execute?;
assert_eq!;
Informal benchmark result (v0.2.1):
$ uname -a
Linux DESKTOP 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
$ lscpu | grep 'Model name:'
Model name: Intel(R) Core(TM) i7-7660U CPU @ 2.50GHz
// Runs the example echo server in a shell.
$ cargo run --example echo --release -- server
// Executes a benchmark command in another shell.
$ echo "hello" | cargo run --example echo --release -- bench -c 1024 -n 1000000
# ELAPSED: 8.111424
# RPS: 123282.91555218912