需要一些帮助来了解断开连接的位置(SocketJS,Vertx)以及如何配置超时。
我正在创建 SockJSServer 以及创建eventBus桥。我观察者经常出现WebSocket连接断开的问题。看着websocket框架,我每隔5秒就会看到一次ping,并且每隔1/2秒就会发出一次心跳(看似生效)。但是,一旦心脏跳动被延迟更长时间,那么5秒钟断开连接时会显示消息 c [3000,'Go away'] 。正如观察到的那样,当服务器忙时(在单独的线程上做其他事情)就会发生。
我搜索了Vertx文档并查看了vertx代码并找到了一些配置参数(在版本和文档中看起来不同)。
.putNumber("ping_interval", 120000)
.putNumber("session_timeout", 1200000)
.putNumber("heartbeat_period",500)
为了绝对确定,我尝试过不同的配置,似乎没有任何影响。在这一点上,我想我已经走到了死墙,需要一些帮助。
Vertx版本2.1P3
服务器snipet
final SockJSServer server = vertx.createSockJSServer(httpServer);
server.bridge(new JsonObject().putString("prefix", "/eventbus")
.putNumber("ping_interval", 120000)
.putNumber("session_timeout", 1200000)
.putNumber("heartbeat_period",500),
new JsonArray().addObject(new JsonObject()),
new JsonArray().addObject(new JsonObject()));
客户代码:
var eventBus = new EventBus('//hostX:12001/eventbus');
答案 0 :(得分:0)
当收到SOCKET_IDLE事件时,您无法使用“ true”参数来完成该事件,因为它表明套接字必须关闭:
SockJSHandler.create(vertx,handlerOptions).bridge(options, event -> {
boolean result = true;
switch(event.type()) {
case SOCKET_CREATED:
LOGGER.info("Socket created");
break;
case SOCKET_IDLE:
result = false;
return;
case SOCKET_CLOSED:
LOGGER.info("Socket closed");
break;
}
event.complete(result);
});