當前位置:
首頁 > 知識 > 即時通訊瑣碎知識點

即時通訊瑣碎知識點

前言

基本即時通訊功能(語音聊天,視頻通話)已經實現了,但是一些細節的地方還是需要處理,這篇文章就羅列一些細節點,待我一步步去完善。


知識點

如何保證伺服器與客戶端一直保持有效連接

  • 客戶端由於沒有網路,失去了長連接,伺服器如何知道這種情況而斷開連接?如何知道一個客戶端一直處於正常的連接狀態。
  • 上邊的問題我們需要通過心跳包的機制來保持有效連接。
  • 我們可以通過每間隔1分鐘或者多久,給伺服器發送一個簡短的消息(越簡潔越好,省流量),伺服器收到消息後知道客戶端處於正常連接狀態,然後我們給客戶端3次重連的機會,如果3分鐘後(再次基礎上富餘5秒)客戶端還沒有心跳包給伺服器,伺服器則判斷客戶端由於一些原因失去了連接,可以直接斷開連接。

客戶端重連

  • 當網路環境切換造成的掉線,需要重新建立連接;
  • 由於伺服器原因而一直連接不上,需要按照科學的間隔時間建立重連,就是不要一直每間隔1分鐘重連一次,正常來說隨著重連次數的增多,間隔應該越來越長;

保持服務不死

  • 為了保持與伺服器的連接線程不死,最好創建Service服務,參考;
  • 為了保持Service不死,參考

給離線用戶發消息

  • 判斷用戶是否在線,不在線的話先將消息存儲到資料庫。當用戶上線時,先去資料庫查詢看是否有自己的消息。
  • 上邊的方法存在一點問題,就是當用戶退出,伺服器狀態還沒有改變的時候,給用戶發消息,數據是會丟失的,改進方法就是無論用戶是否在線都先將消息存儲到資料庫,當用戶收到消息後,給伺服器一個收到消息的回執,伺服器收到回執後可以把資料庫的消息刪除。

應該選用何種技術

  • 筆者使用的是socket.io+webrtc。用socket.io實現長連接,webrtc在此基礎上實現語音視頻通話。
  • 網上有用socket+mina+xmpp+androidpn來實現即時通訊,由於xmpp採用xml協議,佔用流量比較大,不建議在移動端使用。
  • 基於MQTT協議開發的也很火爆,有興趣的可以研究一下。參考
  • 很有參考價值的一篇文章可以看一看,參考。

即時通訊瑣碎知識點

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

C語言小程序——調用系統應用
Linux下Nginx+多Tomcat負載均衡實現詳解

TAG:程序員小新人學習 |