用于Vert.x的Java中的SockJS事件总线客户端

时间:2018-03-13 09:14:14

标签: vert.x


是否有适用于Vert.x的Java SockJS客户端? 类似于TCP / IP网桥,但基于SockJS。 原因是我们需要一个统一的协议栈,连接客户端 到Vert.x.对于JavaScript,我们可以使用vertx3-eventbus-client,它工作得很好。 我们现在正在寻找类似的Java解决方案。

1 个答案:

答案 0 :(得分:0)

还没有(正在进行中的工作)。但是,您可以使用Vert.x HttpClient

自行编写基本客户端
  • 打开websocket
  • 定期发送ping以防止连接被关闭
  • 注册处理程序
  • 收听消息

以下是一个例子:

client.websocket(HTTP_PORT, HTTP_HOST, "/eventbus/websocket", ws -> {
  JsonObject msg = new JsonObject().put("type", "ping");
  ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true));

  // Send pings periodically to avoid the websocket connection being closed
  vertx.setPeriodic(5000, id -> {
    JsonObject msg = new JsonObject().put("type", "ping");
    ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true));
  });

  // Register
  JsonObject msg = new JsonObject().put("type", "register").put("address", "my-address");
  ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true));

  ws.handler(buff -> {
    JsonObject json = new JsonObject(buff.toString()).getJsonObject("body");
    // Do stuff with the body
  });
});

如果您需要使用不同的地址,那么您的处理程序将不得不检查JSON对象,而不仅仅是获取正文。