websocket - Vertx SocketJS 在服务器繁忙几秒钟后断开连接

标签 websocket sockjs event-bus vert.x

需要一些帮助来了解断开连接发生的位置(SocketJS、Vertx)以及如何配置超时。

我正在创建SockJSServer以及创建eventBus桥。我观察到的问题是WebSocket连接频繁断开。查看 websocket 帧,我每 5 秒看到一次 ping,每 1/2 秒看到我配置的心跳(似乎生效)。然而,一旦心跳延迟时间超过 5 秒,就会出现消息c[3000,'走开']。据观察,它发生在服务器繁忙时(在单独的线程上执行其他操作)。

我搜索了 Vertx 文档并查看了 vertx 代码,发现了一些配置参数(不同版本和文档似乎有所不同)。

.putNumber("ping_interval", 120000)
                    .putNumber("session_timeout", 1200000)
                    .putNumber("heartbeat_period",500)

可以肯定的是,我尝试了不同的配置,但似乎没有任何影响。此时,我想我已经走到了死胡同,需要一些帮助。

Vertx版本2.1P3

服务器片段

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');

最佳答案

当您收到 SOCKET_IDLE 事件时,您无法使用“true”参数完成该事件,因为它指示必须关闭套接字:

SockJSHandler.create(vertx,handlerOptions).bridge(选项, 事件 -> { bool 结果 = true; 开关(事件类型()){ 案例 SOCKET_CREATED: LOGGER.info("套接字已创建"); 休息; 情况SOCKET_IDLE: 结果=假; 返回; 案例 SOCKET_CLOSED: LOGGER.info("套接字已关闭"); 休息; } 事件.完成(结果); });

关于websocket - Vertx SocketJS 在服务器繁忙几秒钟后断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28468841/

相关文章:

java - 带有空引用的 Guava/Otto EventBus

websocket - Spring Websockets最大并发连接数

vb.net - 从 VB.NET 与 node.js 通信

javascript - socket io - 它如何知道数据库中的数据是否已更改?

python - Sockjs-tornado 和 rpc

session - 使用 Websockets 时无法在 Spring Controller 中获取 Session

spring - JSON Web Token (JWT) 和基于 Spring 的 SockJS/STOMP Web Socket

scala - Akka 事件总线 : find unconsumed events in a channel?

Android - 使用事件总线(如 Otto)进行 UI 元素通信是否正确?

iOS Safari WebSockets : huge latency when sending messages at short intervals