我使用Stomp over SockJS和Spring websockets作为后端。我的stomp客户端重新连接后偶尔会出现问题(wifi丢失,服务器关闭,其他)。连接完全恢复,但通过几秒钟我可以在浏览器网络中看到SockJS客户端如何尝试发送xhr-streaming与旧会话ID。后端以关闭帧c [1000,“Go Away!”]响应应用程序仍然可以工作,但是这个问题会加载CPU并减慢应用程序的速度。
我可以玩几次关闭并启动服务器(并非总是如此)。我无法理解SockJS一旦重新连接(我们从0销毁并创建Sockjs实例)发送xhr-streaming请求与旧会话的id(维护预重新连接id会话?内存泄漏?)。我想在重新连接后保持Sockjs不是任何状态,并且总是从头开始。
后端日志:
2016-05-02 21:45:01.943 DEBUG [http-nio-8090-exec-7] o.s.w.s.s.t.h.XhrStreamingTransportHandler - Connection already closed (but not removed yet) for XhrStreamingSockJsSession[id=ypsjtids]
客户日志:
(新SessiónId - > h2pystok,旧会话ID - > ypsjtids)
<<< PONG
browser.js:120 sockjs-client:buffered-sender send +45ms "\n"
browser.js:120 sockjs-client:buffered-sender sendSchedule +0ms 1
browser.js:120 sockjs-client:ajax-based create ajax sender +2ms http://localhost/eess-services/stomp/355/h2pystok ["\n"]
browser.js:120 sockjs-client:browser:xhr POST +0ms http://localhost/eess-services/stomp/355/h2pystok/xhr_send
ws.js:216 >>> PING
browser.js:120 sockjs-client:browser:xhr withCredentials +2ms
browser.js:120 sockjs-client:browser:xhr readyState +18ms 4
browser.js:120 sockjs-client:browser:xhr status +1ms 200
browser.js:120 sockjs-client:browser:xhr finish +0ms 200 hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
o
h
h
h
h
h
browser.js:120 sockjs-client:receiver:xhr finish +0ms 200 hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
browser.js:120 sockjs-client:receiver:xhr _chunkHandler +0ms 200
browser.js:120 sockjs-client:receiver:xhr close +0ms network
browser.js:120 sockjs-client:polling close +1ms null network undefined
browser.js:120 sockjs-client:polling _scheduleReceiver +0ms
browser.js:120 sockjs-client:receiver:xhr http://localhost/eess- services/stomp/266/ypsjtids/xhr_streaming +0ms
browser.js:120 sockjs-client:browser:xhr POST +1ms http://localhost/eess-services/stomp/266/ypsjtids/xhr_streaming
github中存在问题: https://github.com/sockjs/sockjs-client/issues/308
我在制作中遇到这个问题:( 问候。
编辑:
我发现可能的错误在哪里。在polling.js中,当关闭原因是“网络”时,我看到了一种特殊的待遇。什么时候网络再次调用函数_scheduleReceiver()。当我们重新连接时发生无限循环。我不知道这种治疗的原因是什么,但我可以尝试删除'网络'的特殊处理,一切正常。 @skozin你能试试吗?
if(!self.pollIsClosing){if(reason ==='network'){self._scheduleReceiver(); } else {self.emit('close',code || 1006,reason); self.removeAllListeners(); }}
解决方法是:
if(!self.pollIsClosing){self.emit('close',code || 1006,reason); self.removeAllListeners(); }
答案 0 :(得分:0)
我有同样的问题。我的应用程序运行在安全&#34; https://&#34;在哪里,我试图从一个&#34;无担保的CDN位置获取sockjs-0.3.min.js&#34;无法下载.js文件。这导致它在断开套接字时寻找Xhr_Streaming而不是我的sockjs方法。 一些与http vs https相关的参考文献: https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content
我通过将&#34;不安全的cdn路径更改为安全的cdn路径来修复此问题&#34;即,
&#34;&LT; script src =&#34; https://cdn.jsdelivr.net/sockjs/0.3.4/sockjs.min.js"&gt;&lt; / script&gt;&#34;