5个版本 (3个重大更改)
0.3.1 | 2021年4月4日 |
---|---|
0.3.0 | 2021年1月14日 |
0.2.0 | 2021年1月14日 |
0.1.0 | 2020年4月6日 |
0.0.1 | 2020年2月20日 |
在 网络编程 中排名 2056
每月下载量 1,000
130KB
3K SLoC
wamp_async
使用Rust编写的异步 WAMP 客户端实现。
用法
有关用法示例,请参阅
-
// Publish event with no arguments and with acknowledgment let ack_id = client.publish("peer.heartbeat", None, None, true).await?; println!("Ack id {}", ack_id.unwrap());
// Register for events let (_sub_id, mut event_queue) = client.subscribe("peer.heartbeat").await?; // Wait for the next event match event_queue.recv().await { Some((_pub_id, args, kwargs)) => println!("Event(args: {:?}, kwargs: {:?})", args, kwargs), None => println!("Event queue closed"), };
-
// Call endpoint with one argument let (args, kwargs) = client.call("peer.echo", Some(vec![12.into()]), None).await?; println!("RPC returned {:?} {:?}", args, kwargs);
// Declare your RPC function async fn rpc_echo(args: Option<WampArgs>, kwargs: Option<WampKwArgs>) -> Result<(Option<WampArgs>, Option<WampKwArgs>), WampError> { println!("peer.echo {:?} {:?}", args, kwargs); Ok((args, kwargs)) } // Register the function let rpc_id = client.register("peer.echo", rpc_echo).await?;
结构序列化和反序列化
// Call endpoint with one argument
let (args, kwargs) = client.call("peer.echo", Some(vec![12.into()]), None).await?;
// or
let (args, kwargs) = client.call("peer.echo", Some(wamp_async::try_into_args((12,))), None).await?;
println!("RPC returned {:?} {:?}", args, kwargs);
#[derive(serde::Deserialize, serde::Serialize)]
struct MyKwArgs {
name: String,
}
// Declare your RPC function
async fn rpc_echo(args: Option<WampArgs>, kwargs: Option<WampKwArgs>) -> Result<(Option<WampArgs>, Option<WampKwArgs>), WampError> {
// You only need serde-deserializable structure (e.g. a tuple of two integers)
let valid_args: (i32, i32) = if let Some(args) = args {
wamp_async::try_from_args(args)?
} else {
return Err(wamp_async::WampError::UnknownError("positional args are required".to_string()));
};
println!("Two integers are: {}, {}", valid_args.0, valid_args.1);
// You can also use a custom struct and use a little bit of Rust helpers
let valid_kwargs: Option<MyKwArgs> = kwargs.map(wamp_async::try_from_kwargs).transpose()?;
if let Some(MyKwArgs { name }) = valid_kwargs {
println!("Name is {}", name);
} else {
println!("There were no kwargs specified");
}
Ok((
Some(wamp_async::try_into_args(valid_args)?),
valid_kwargs.map(wamp_async::try_into_kwargs).transpose()?,
))
}
// Register the function
let rpc_id = client.register("peer.echo", rpc_echo).await?;
特性
特性 | 描述 | 状态 |
---|---|---|
WebSocket | 使用 WebSocket 作为传输 | ✔ |
安全WebSocket | 通过HTTPS的WebSocket | ✔ |
原始套接字 | 使用轻量级TCP作为传输 | ✔ |
安全原始套接字 | 带TLS的原始套接字 | ✔ |
MsgPack | 使用 MessagePack 进行消息序列化 | ✔ |
JSON | 使用 JSON 进行消息序列化 | ✔ |
客户端
基本配置
特性 | 描述 | 状态 |
---|---|---|
发布者 | 能够在主题上发布消息 | ✔ |
订阅者 | 可以订阅并接收主题的事件 | ✔ |
调用者 | 能够调用RPC端点 | ✔ |
被调用者 | 能够注册RPC端点 | ✔ |
高级配置
特性 | 描述 | 状态 |
---|---|---|
客户端认证 | 对客户端认证的低级别支持(基于票据的,CRA) | ✔ |
逐步调用 | 从被调用者向调用者报告部分结果 | 需要帮助 |
许可证
贡献
除非您明确说明,否则您提交的任何有意提交以包含在作品中的贡献,根据Apache-2.0许可证的定义,应按照上述方式双重许可,不附加任何额外条款或条件。
依赖项
~7–19MB
~290K SLoC