Vert.x-tcp-eventbus-bridge
Vert.x-tcp-eventbus-bridge是连接Vert.x EventBus的TCP bridge。 要使用此项目,请先加入以下依赖:
Maven(在您的 pom.xml):
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-tcp-eventbus-bridge</artifactId>
<version>4.4.0</version>
</dependency>
Gradle(在您的 build.gradle 文件中):
compile 'io.vertx:vertx-tcp-eventbus-bridge:4.4.0'
TCP EventBus bridge建立在TCP之上, 任何能够创建TCP套接字的应用程序都可以通过它的EventBus与远端的Vert.x程序沟通。
因为整个HTTP WebSockets已经替换为纯TCP套接字, 所以相比于SockJS bridge来说TCP bridge的主要使用场景是有限资源的轻量化应用程序。
即使是对于没有严格资源限制的应用程序,协议仍然有用: 该协议足够简单, 便于与非JVM程序高效集成。
该协议已尽可能的保持简单,通信使用双向帧。 帧结构如下:
<Length: uInt32><{
type: String,
address: String,
(replyAddress: String)?,
headers: JsonObject,
body: JsonObject
}: JsonObject>
该消息内包含一个可能未被压缩过的JSON文档。 该消息必须以大端序32位整数(4 bytes) 作为前缀来指示JSON文档的完整长度(以字节为单位)。
TCP客户端可以发送如下 类型 type 的消息:
-
send发送消息到address, -
publish发布消息到address, -
register订阅发送或发布到address的消息, -
unregister退订已经发送或发布到address的消息, -
ping发送ping请求到bridge。
请注意 replyAddress 字段是可选的,并且只能用于 send 消息。
带有该字段的消息希望 最终 从服务端收到一条对应的返回消息,
返回消息中 address 的值便是原先消息中的 replyAddress 的值。
服务端返回到客户端的消息可以是如下的 类型 type :
-
message发送或者发布到address, -
err报告错误(body应该包含详细信息), -
pong响应客户端发送的ping请求。
项目源代码中提供了一个可用的NodeJS客户端示例。 该客户端使用了与 SockJS 对应部分相同的API这将会便于在TCP与SockJS之间切换。
关于如何开始使用此birdge的示例如下:
TcpEventBusBridge bridge = TcpEventBusBridge.create(
vertx,
new BridgeOptions()
.addInboundPermitted(new PermittedOptions().setAddress("in"))
.addOutboundPermitted(new PermittedOptions().setAddress("out")));
bridge.listen(7000, res -> {
if (res.succeeded()) {
// 成功……
} else {
// 失败……
}
});