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