8个版本
0.1.6 | 2022年1月25日 |
---|---|
0.1.4 | 2022年1月23日 |
0.1.0 | 2021年12月30日 |
0.0.3 | 2021年12月29日 |
#37 in #rpc-server
每月 32次下载
用于saildb
7KB
92 代码行
SRPC
SRPC是一个简单的RPC系统,基于Canary构建,旨在尽可能简洁且无成本。
SRPC服务的简单示例
#[srpc::rpc] // other options include rpc(mutex), rpc(none)
#[derive(Default)]
struct DistributedList<T> {
list: Vec<T>
}
#[srpc::rpc]
impl<T: Clone> DistributedList<T> {
async fn push(&mut self, value: T) {
self.list.push(value);
}
async fn get(&self, index: usize) -> Option<T> {
self.list.get(index).and_then(|val| Some(val.clone()))
}
async fn remove(&mut self, index: usize) -> T {
self.list.remove(index)
}
}
// database
async fn main() -> Result<()> {
GLOBAL_ROUTE.add_service_at::<DistributedList<i32>>("list", Arc::new(RwLock::new(Default::default())))?;
let addr = "[email protected]:8080".parse::<Addr>()?;
// listen in the following address
addr.bind().await?;
std::future::pending().await
}
// peer
async fn main() -> Result<()> {
let addr = "list://[email protected]:8080".parse::<ServiceAddr>()?;
let connection = addr.connect().await?;
let mut db = connection.client::<DistributedList<i32>>();
db.push(1).await?;
db.push(5).await?;
db.push(6).await?;
let value = db.get(1).await?;
println!("{:?}", value); // index 1 == 5
Ok(())
}
依赖项
~12–28MB
~396K SLoC