Vert.x-tcp-eventbus-bridge文档翻译

747 阅读2分钟

Vert.x-tcp-eventbus-bridge

Vert.x-tcp-eventbus-bridge 是一个对Vert.x EventBus的TCP桥接工具。使用它前请把以下依赖添加到你的项目中

Maven (在你的pom.xml):

<dependency>
 <groupId>io.vertx</groupId>
 <artifactId>vertx-tcp-eventbus-bridge</artifactId>
 <version>3.9.4</version>
</dependency>

Gradle (在你的build.gradle 文件中):

compile 'io.vertx:vertx-tcp-eventbus-bridge:3.9.4'

TCP EventBus bridege是基于TCP的,这意味着任何应用都可以创建TCP套接字通过Vert.x实例的event bus与其进行交互

TCP bridge相对于SockJS bridge,TCP bridge主要用于,因为整个HTTP WebSockets都被普通的TCP套接字替换且需要更轻量级的资源约束的应用程序。

(译者:SockJS 是一个浏览器上运行的 JavaScript 库,如果浏览器不支持 WebSocket,该库可以模拟对 WebSocket 的支持,实现浏览器和 Web 服务器之间低延迟、全双工、跨域的通讯通道)

即使对于没有严格资源约束的应用程序,它也仍然很有用,因为该协议非常简单,可以有效地提供与非jvm应用程序的集成接口。

协议非常简单,而且以帧的形式进行通讯。一个帧的结构如下

<Length: uInt32><{
  type: String,
  address: String,
  (replyAddress: String)?,
  headers: JsonObject,
  body: JsonObject
}: JsonObject>

消息由一个JSON文档组成,该文档可能被压缩,也可能没有被压缩。消息必须以一个32位big-endian正整数开头(即4 bytes),它表示JSON文档的完整长度(以字节为单位)。

(译者:big-endian是指最高位开始传送,从最低位开始传送的相对应地叫做Little-Endian)

TCP客户端可以发送以下类型(Type)的消息

(译者:即协议中的type字段)

  1. send:发送(send)消息到一个address代表的地址
  2. publish:发布(publish)消息到address代表的地址
  3. register:订阅发送或发布到某个地址的信息
  4. unregister:取消订阅发送或发布到某个地址的信息
  5. ping:向bridge发送ping请求

注意:

replyAddress字段是可选的,它可能只用于send类型的信息。带有该字段的消息将最终从服务器接收回一条消息,该服务器的address字段将是原始replyAddress值的字段。

服务器会将信息返回给客户端,这个消息可能是以下类型(type)的

(译者:即协议中的type字段)

  1. messgae:被发送或者发布到address的信息
  2. err:指示一个错误(body应当包含错误细节)
  3. pong:响应客户端发来的ping请求

项目源代码中有一个示例NodeJS客户端。这个客户端使用相同的API作为SockJS的计数器部分,所以它应该使它更容易在TCP和SockJS的实现之间切换。

这个例子是关于如何开始使用这座bridge的

TcpEventBusBridge bridge = TcpEventBusBridge.create(
    vertx,
    new BridgeOptions()
        .addInboundPermitted(new PermittedOptions().setAddress("in"))
        .addOutboundPermitted(new PermittedOptions().setAddress("out")));

bridge.listen(7000, res -> {
  if (res.succeeded()) {
    // succeed...
  } else {
    // fail...
  }
});