<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-tcp-eventbus-bridge</artifactId>
<version>5.0.1</version>
</dependency>
Vert.x TCP 事件总线桥接
Vert.x TCP 事件总线桥接是一个连接 Vert.x 事件总线的 TCP 桥接。要使用此项目,请将以下依赖项添加到您的构建描述符的 dependencies 部分
Maven(在您的 pom.xml
中)
Gradle(在您的 build.gradle
文件中)
compile 'io.vertx:vertx-tcp-eventbus-bridge:5.0.1'
TCP 事件总线桥接构建于 TCP 之上,这意味着任何可以创建 TCP 套接字的应用程序都可以通过其事件总线与远程 Vert.x 实例进行交互。
相较于 SockJS 桥接,TCP 桥接的主要用例是针对资源受限且需要轻量级的应用程序,因为它用纯 TCP 套接字取代了整个 HTTP WebSocket。
当然,即使对于没有严格资源限制的应用程序,它也仍然有用:该协议足够简单,可以有效地为非 JVM 应用程序提供集成接口。
协议被保持尽可能简单,通信使用双向帧。帧的结构如下
<Length: uInt32><{ type: String, address: String, (replyAddress: String)?, headers: JsonObject, body: JsonObject }: JsonObject>
消息由一个 JSON 文档组成,该文档可能已或未被最小化。消息必须以一个 大端序 32 位正整数(4 字节)作为前缀,该整数表示 JSON 文档的完整长度(以字节为单位)。
TCP 客户端发送的消息的 type
可以是以下类型
-
send
向一个address
发送消息, -
publish
向一个address
发布消息, -
register
订阅发送或发布到某个address
的消息, -
unregister
取消订阅发送或发布到某个address
的消息, -
ping
向桥接发送ping
请求。
请注意,replyAddress
字段是可选的,并且可能仅用于 send
消息。包含此字段的消息预计将最终从服务器接收回一条消息,该消息的 address
字段将是原始 replyAddress
值。
服务器将消息回传给客户端,它们可以是以下 type
类型
-
message
用于发送或发布到address
的消息,或 -
err
表示错误(body
应包含详细信息),或 -
pong
响应客户端发送的ping
请求。
项目源代码中提供了一个 Node.js 客户端示例。此客户端使用与 SockJS 对应版本相同的 API,因此它应该能更容易地在 TCP 和 SockJS 实现之间切换。
关于如何开始使用此桥接的示例可能是
TcpEventBusBridge bridge = TcpEventBusBridge.create(
vertx,
new BridgeOptions()
.addInboundPermitted(new PermittedOptions().setAddress("in"))
.addOutboundPermitted(new PermittedOptions().setAddress("out")));
bridge.listen(7000).onComplete(res -> {
if (res.succeeded()) {
// succeed...
} else {
// fail...
}
});
监听 Unix 域套接字
在 JDK 16+ 上运行或使用原生传输时,服务器可以监听 Unix 域套接字
SocketAddress domainSocketAddress = SocketAddress.domainSocketAddress("/var/tmp/bridge.sock");
bridge.listen(domainSocketAddress).onComplete(res -> {
if (res.succeeded()) {
// succeed...
} else {
// fail...
}
});