国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

WebSocket客戶端連接不上和掉線的問題以及解決方案

jonychen1

看到最近有很多人在blog上問關于WebSocket客戶端連接和掉線的問題,有一部分我以前也遇到過,在這里我羅列了一些我以前遇到過的問題和其他簡單的WebSocket服務。

Q1 客戶端連接不上的問題
這個問題我遇到的基本集中在后端,遇到的話需要收集日志進行分析,首先要查看是因為什么原因出現(xiàn)問題的,不過這種情況下多半會出現(xiàn)Exception,從Exception著手分析問題即可。

Q2 1客戶端掉線問題
這里所指的客戶端掉線的問題是指客戶端非正常掉線。有的時候會出現(xiàn)Exception,通過處理Exception即可關閉連接,有的時候像客戶端突然網(wǎng)絡離線的情況下,這個時候后臺沒有收到客戶端發(fā)來的close frame,會認為這個客戶端還是處在在線的情況。那這個問題可以通過心跳包的問題解決。也可以通過客戶端向服務器發(fā)心跳包,也可以服務器發(fā)送心跳包至客戶端。我們最終采用的方案是客戶端向服務端發(fā)送心跳包,服務端收到心跳包后會檢測當前websocket session隊列中是否存在同屬性的websocket session,有的話關閉以前的session即可。我個人認為還是服務端像客戶端發(fā)送心跳包好一些,但這樣做要注意性能問題。

Q3 websocket連接后1分鐘自動斷開關閉
這是因為websocket長連接有默認的超時時間(1分鐘,由proxy_read_timeout決定),就是超過一定的時間沒有發(fā)送任何消息,連接會自動斷開。解決辦法就是讓瀏覽器每隔一定時間(要小于超時時間)發(fā)送一個心跳。
代碼如下:

window.setInterval(function(){ //每隔5秒鐘發(fā)送一次心跳,避免websocket連接因超時而自動斷開
    var ping = {"type":"ping"};
    ws.send(JSON.stringify(ping));
},5000);

Q4 能收到客戶端消息,后臺也顯示發(fā)送,但是客戶端收不到
這個問題經(jīng)我個人觀察和猜測,應該是websocketsession沒有成功關閉或者成功關閉但是和一個websocketsession對應多個session有關,因為我把上面的問題解決了之后,這個問題也沒出現(xiàn)過了。
希望我遇到的問題以及解決方案對你們有所幫助。

9559 0 0
0個評論

年代過于久遠,無法發(fā)表評論

jonychen1

2010
積分
0
獲贊數(shù)
0
粉絲數(shù)
2018-07-16 加入
??