即時通訊瑣碎知識點
知識
08-01
前言
基本即時通訊功能(語音聊天,視頻通話)已經實現了,但是一些細節的地方還是需要處理,這篇文章就羅列一些細節點,待我一步步去完善。
知識點
如何保證伺服器與客戶端一直保持有效連接
- 客戶端由於沒有網路,失去了長連接,伺服器如何知道這種情況而斷開連接?如何知道一個客戶端一直處於正常的連接狀態。
- 上邊的問題我們需要通過心跳包的機制來保持有效連接。
- 我們可以通過每間隔1分鐘或者多久,給伺服器發送一個簡短的消息(越簡潔越好,省流量),伺服器收到消息後知道客戶端處於正常連接狀態,然後我們給客戶端3次重連的機會,如果3分鐘後(再次基礎上富餘5秒)客戶端還沒有心跳包給伺服器,伺服器則判斷客戶端由於一些原因失去了連接,可以直接斷開連接。
客戶端重連
- 當網路環境切換造成的掉線,需要重新建立連接;
- 由於伺服器原因而一直連接不上,需要按照科學的間隔時間建立重連,就是不要一直每間隔1分鐘重連一次,正常來說隨著重連次數的增多,間隔應該越來越長;
保持服務不死
- 為了保持與伺服器的連接線程不死,最好創建Service服務,參考;
- 為了保持Service不死,參考
給離線用戶發消息
- 判斷用戶是否在線,不在線的話先將消息存儲到資料庫。當用戶上線時,先去資料庫查詢看是否有自己的消息。
- 上邊的方法存在一點問題,就是當用戶退出,伺服器狀態還沒有改變的時候,給用戶發消息,數據是會丟失的,改進方法就是無論用戶是否在線都先將消息存儲到資料庫,當用戶收到消息後,給伺服器一個收到消息的回執,伺服器收到回執後可以把資料庫的消息刪除。
應該選用何種技術
- 筆者使用的是socket.io+webrtc。用socket.io實現長連接,webrtc在此基礎上實現語音視頻通話。
- 網上有用socket+mina+xmpp+androidpn來實現即時通訊,由於xmpp採用xml協議,佔用流量比較大,不建議在移動端使用。
- 基於MQTT協議開發的也很火爆,有興趣的可以研究一下。參考
- 很有參考價值的一篇文章可以看一看,參考。
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※C語言小程序——調用系統應用
※Linux下Nginx+多Tomcat負載均衡實現詳解
TAG:程序員小新人學習 |