服务器繁忙几秒钟后,Vertx SocketJS将断开连接

时间:2015-02-12 03:36:50

标签: websocket sockjs event-bus vert.x

需要一些帮助来了解断开连接的位置(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');

1 个答案:

答案 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); });