#event-bus #vertx #tcp #bridge #client #future #json

vertx-tcp-eventbus-bridge-client-rust

基于未来的 vert.x TCP 事件总线网桥客户端在 Rust 中

2 个不稳定版本

0.2.0 2019年4月14日
0.1.0 2018年8月13日

#18 in #event-bus

MIT 许可证

24KB
446

正在进行的基于未来的 vert.x TCP 事件总线网桥客户端在 Rust 中的工作

当前状态

Build Status

协议( 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