【发布时间】:2017-01-06 08:01:48
【问题描述】:
我们有一个 Spring over WebSockets 连接,我们正在传递一个 CONNECT 框架:
CONNECT\naccept-version:1.2\nheart-beat:10000,10000\n\n\u0000
处理程序确认,启动新会话,然后返回:
CONNECTED
version:1.2
heart-beat:0,0
但是,我们需要心跳,这样我们就可以保持 WebSocket 处于打开状态。我们不使用 SockJS。
我单步执行了 Spring 消息处理程序:
StompHeaderAccessor [headers={simpMessageType=CONNECT, stompCommand=CONNECT, nativeHeaders={accept-version=[1.2], heart-beat=[5000,0]}, simpSessionAttributes={}, simpHeartbeat=[J@5eba717, simpSessionId=46e855c9}]
在获得heart-beat(本机标头)后,它会设置看起来像内存地址simpHeartbeat=[J@5eba717, simpSessionId=46e855c9}]
值得注意的是,在经纪人认证后:
Processing CONNECT session=46e855c9(这里的sessionId和simpSessionId不一样)?
在之前运行 TRACE 调试时,我看到了“正在调度心跳...”或类似的通知...虽然我现在没有看到?
知道发生了什么吗?
谢谢
我在documentation找到了解释:
来自 SockJS 任务线程池的 SockJS 任务调度器统计信息 用于发送心跳的调度程序。 注意,当心跳 在 STOMP 级别进行协商,SockJS 心跳被禁用。
SockJS 的心跳与 STOMP 的心跳有什么不同?
【问题讨论】: