2 个不稳定版本
| 0.2.0 | 2019年4月14日 |
|---|---|
| 0.1.0 | 2018年8月13日 |
#18 in #event-bus
24KB
446 行
正在进行的基于未来的 vert.x TCP 事件总线网桥客户端在 Rust 中的工作
当前状态
协议( https://github.com/vert-x3/vertx-tcp-eventbus-bridge)
该协议相当简单
- 4字节 int32 消息长度(大端编码)
- json 字符串(以 UTF-8 编码)
从网桥到客户端的消息
每个 JSON 消息都将包含一个 type 键,其值为字符串。以下显示了每种类型及其对应的键
类型: "pong"
pong 不需要额外的键。
它是客户端到网桥的 ping 请求的响应。
类型: "err"
message: (字符串,必需) 错误类型,以下之一:"AccessDenied","AddressRequired","UnknownAddress","UnknownType"
类型: "message"
对于常规消息,对象还将包含
address: (字符串,必需) 目标地址。body: (对象,必需) 消息内容,作为 JSON 对象。headers: (对象,可选) 以 JSON 对象形式表示的标题,其值为字符串。replyAddress: (字符串,可选) 回复地址。send: (布尔值,必需) 如果消息是发送,则为true,如果为发布,则为false。
当客户端的消息请求回复,并且该回复失败时,对象将包含以下内容
failureCode: (数字,必需) 失败代码failureType: (字符串,必需) 失败名称message: (字符串,必需) 表明失败的异常的消息
从客户端到网桥的消息
JSON 对象必须包含一个 type 键,其值为字符串。以下显示了每种类型及其对应的键
类型: "send", 类型: "publish"
地址: (字符串,必需) 目标地址body: (对象,必需) 消息内容,作为 JSON 对象。headers: (对象,可选) 以 JSON 对象形式表示的标题,其值为字符串。replyAddress: (字符串,可选) 回复地址。
类型: "register", 类型: "unregister"
地址: (字符串,必需) 目标地址headers: (对象,可选) 以 JSON 对象形式表示的标题,其值为字符串。
类型: "ping"
ping 不需要额外的键。
示例
let task = future::Eventbus::connect(IpAddr::from_str("127.0.0.1").unwrap(), 12345);
let task = task.and_then(|(eventbus, readstream, writestream)| {
tokio::spawn(readstream.into_future().map(|_|()).map_err(|e|()));
tokio::spawn(writestream.into_future().map(|_|()).map_err(|e|()));
futures::future::ok(eventbus)
});
let task = task.and_then(|eventbus:Eventbus|{
let test_reply=eventbus.send_reply("test".to_string(),json!({
"aaaa":"bbbb"
})).unwrap().and_then(|response|{
println!("{:?}",response);
futures::future::ok(())
});
test_reply
});
tokio::run(task.map_err(|e|()));
依赖关系
future
- futures = "0.1"
Json
- serde_json = "1.0"
- serde = "1.0"
- serde_derive = "1.0"
Bytes
- bytes = "0.4"
依赖关系
~5MB
~84K SLoC