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字段)
send:发送(send)消息到一个address代表的地址publish:发布(publish)消息到address代表的地址register:订阅发送或发布到某个地址的信息unregister:取消订阅发送或发布到某个地址的信息ping:向bridge发送ping请求
注意:
replyAddress字段是可选的,它可能只用于send类型的信息。带有该字段的消息将最终从服务器接收回一条消息,该服务器的address字段将是原始replyAddress值的字段。
服务器会将信息返回给客户端,这个消息可能是以下类型(type)的
(译者:即协议中的type字段)
messgae:被发送或者发布到address的信息err:指示一个错误(body应当包含错误细节)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...
}
});