我在java中每秒向javascript websocket客戶端發送少量消息(5-10)的websocket,然後使用角度ui-grid顯示。Websocket在一段時間後停止接收數據(20-30分鐘)
問題是,20-30分鐘後,瀏覽器(IE,Firefox,Chrome)停止接收消息。
- 可能是什麼問題?
- javax.websocket.Session的默認會話超時值是什麼?
- 我應該檢查什麼設置/值,例如:
getMaxTextMessageBufferSize()
等
我在java中每秒向javascript websocket客戶端發送少量消息(5-10)的websocket,然後使用角度ui-grid顯示。Websocket在一段時間後停止接收數據(20-30分鐘)
問題是,20-30分鐘後,瀏覽器(IE,Firefox,Chrome)停止接收消息。
getMaxTextMessageBufferSize()
等問題出在通信鏈路(導線連通性)。我通過重新連接到websocket.onclose(客戶端JavaScript代碼)上的websocket解決了該問題。 websocket會話關閉時調用onclose。我通過在onclose中調用connect()函數來重新連接。
這個答案也有很大幫助。 AngularJS: Reconnect WebSocket inside a service
查看是否getMaxIdleTimeout()/ setMaxIdleTimeout()是你在找什麼。
從上setMaxIdleTimeout的javax.websocket.Session文檔():
此會話之前,設置非零的毫秒數將由容器被關閉,如果它是不活動的,即沒有消息要麼是發送或接收。值爲0或負值表示會話永遠不會由於不活動而超時。
這可能不是必需的,因爲會話永遠不會空閒,每秒發送的消息很少。無論如何,現在我將setMaxIdleTimeout設置爲零。 – yogi
發送消息的C++應用程序運行在包含java websocket的單獨服務器和java應用程序服務器上,並運行在單獨的服務器上。當客戶端(瀏覽器)從同一臺服務器(java/tomcat)運行時,沒有問題。但是如果瀏覽器運行在不同的機器上,問題就會出現,java websocket會話將被NORMAL_CLOSURE關閉。這個問題似乎是數據包丟失。請編輯問題以添加此信息 – yogi