IM通訊相關協議調研

2021-09-11 16:35:50 字數 815 閱讀 4917

目前常用的傳輸層協議中有tcp與udp:

早期的im因為服務端資源(伺服器硬體、網路頻寬等)比較昂貴且沒有更好的辦法來分擔效能負載,所以很多時候會考慮使用udp,這其中主要是早期的qq為代表。

目前基於tcp且可用於即時通訊的應用層協議有http,xmpp,websocket協議。

http僅支援客戶端向服務端傳送請求,如果在im專案中使用http來實現即時通訊,比較常用的方式是採用輪詢 (polling)和comet,其中輪詢 (polling)會持續消耗客戶端的資源和裝置電量,並且無法保證訊息的實時性。而使用comet會在服務端產生阻塞,由於長期占用連線,讓web喪失了無狀態高併發的特點,大量消耗了伺服器頻寬和資源。

xmpp使用tcp傳遞xml流。使用xml承載資料擁有很強的可拓展性和可讀性,但是在服務端沒有必要相容其他公司im服務的前提下 而去xml格式的檔案的傳輸一樣會帶來不必要的頻寬占用和資源消耗。 關於更多的xmpp協議的分析見

websocket相比http協議的comet技術,不僅節約了header的問題(websocket的head資訊只有短短的2個位元組)。更加重要的是是通訊的穩定性,comet在遇到網路問題之後,想要在不重新整理頁面的情況下恢復通訊,非常困難,而websocket中提供了onclose函式來處理斷開網路後的情況,這為我們與伺服器的通訊提供了可靠的保障。在github上有乙個js庫( 就是通過這種方式來處理websocket斷網重連。 關於更多websocket的分析可見

所以在當前的時間節點下,移動即時通訊程式採用websocket協議作為的應用層協議是乙個合適的選擇。

網路相關協議要點

tcp協議是面向連線,可靠的傳輸層協議,是基於全雙工通訊,並且是基於位元組流的。1 保證傳輸資料可靠性機制 a 定時器 當tcp發出乙個報文段,會啟動乙個定時器,等待目的端確認收到報文段,若一段時間之後,沒有收到確認資訊,就會重傳報文段。b 確認 當tcp收到發自tcp連線另一端的資料,將會傳送乙個...

KDC以及相關協議

kdc 被提出是為了解決對稱金鑰加密通訊在實際使用時存在的一些問題。為此,我們先了解一下私鑰加密通訊的一些窘境 私鑰加密用來保證在不安全通道上進行通訊時,通訊雙方資訊的保密性和完整性。然而其前提是雙方擁有共享的金鑰。那麼問題來了,通訊的雙方如何安全地共享此金鑰呢?顯然私鑰的共享不能在公共的通道上進行...

USB硬體相關 協議

關於usb驅動協議那邊的事情 有的時候會感覺很奇怪,乙個usb咋麼就那麼牛逼,小可以給裝置充電,大還能傳播資料還那麼的多,而且巴拉巴拉 而且仔細觀察usb 也就只有4根pin腳,為什麼連線電腦居然可以出好多個埠?而且都可以往這些埠寫東西?這不科學啊 帶著這些疑問,我好好科普了一下自以為很了解的通訊知...