微信開發(fā)協(xié)議小結
1.發(fā)布的消息對應一個ID(只要單個方向唯一即可,服務器端可能會根ID判斷重復接收),消息重傳機制確保有限次的重試,重試失敗給予用戶提示,發(fā)送成功會反饋確認,客戶端只有收到確認信息才知道發(fā)送成功。發(fā)送消息可能不會產(chǎn)生新SyncKey。
2.基于版本號(SynKey)的狀態(tài)消息同步機制,增量、有序傳輸需求水到渠成。長連接通知/短連接獲取、確認等,交互方式簡單,確保了消息可靠譜、準確無誤到達。
3.客戶端/服務器端都會存儲消息ID處理記錄,避免被重復消費客戶端獲取最新消息,但未確認,服務器端不會認為該消息被消費掉。下次客戶端會重新獲取,會查詢當前消息是否被處理過。根據(jù)一些現(xiàn)象猜測。
4.總體上看,微信協(xié)議跨平臺(TCP或HTPP都可呈現(xiàn),處理方式可統(tǒng)一),通過“握手”同步,很可靠,無論哪一個平臺都可以支持的很好
5.微信協(xié)議最小成本為16字節(jié),大部分時間若干個消息包和在一起,批量傳輸。微信協(xié)議說不上最簡潔,也不是最節(jié)省流量,但是非常成功的。
6.若服務器檢測到一些不確定因素,可能會導致微啟用安全套接層SSL協(xié)議進行常規(guī)的TCP長連接傳輸。短連接都沒有發(fā)生變化
7.發(fā)送消息方式
發(fā)送消息走已經(jīng)建立的TCP長連接通道,發(fā)送消息到服務器,然后接受確認信息等,產(chǎn)生一次交互。
小伙伴接收到信息閱讀也都會收到服務器端通知,產(chǎn)生一次交互等。
可以確定,微信發(fā)送消息走TCP長連接方式,因為不對自身狀態(tài)數(shù)據(jù)產(chǎn)生影響,應該不交換SyncKey。
在低速網(wǎng)絡下,大概會看到消息發(fā)送中的提示,屬于消息重發(fā)機制
網(wǎng)絡不好有時客戶端會出現(xiàn)發(fā)送失敗的紅色感嘆號
已發(fā)送到服務器但未收到確認的消息,客戶端顯示紅色感嘆號,再次重發(fā),服務器作為重復消息處理,反饋確認
上傳圖片,會根據(jù)圖片大小,分割成若干部分(大概1.5K被劃分為一部分),同一時間點,客戶端會發(fā)起若干次POST請求,各自上傳成功之后,服務器大概會合并成一個完整圖片,返回一個縮略圖,顯示在APP聊天窗口內(nèi)。APP作為常規(guī)的文字消息發(fā)送到服務器端
上傳音頻,則單獨走TCP通道,一個兩秒的錄制音頻,客戶端錄制完畢,分為兩塊傳輸,一塊最大1.5K左右,服務端響應一條數(shù)據(jù)通知確認收到。共三次數(shù)據(jù)傳輸。
音頻和純文字信息一致,都是走TCP長連接,客戶端發(fā)送,服務器端確認。
以上所述是小編給大家介紹的微信開發(fā)協(xié)議小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
Java8新特性之JavaFX 8_動力節(jié)點Java學院整理
這篇文章主要介紹了Java8新特性之JavaFX 8的相關知識,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-06-06解決springboot中@DynamicUpdate注解無效的問題
這篇文章主要介紹了解決springboot中@DynamicUpdate注解無效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Java中Easyexcel?實現(xiàn)批量插入圖片功能
這篇文章主要介紹了Easyexcel?實現(xiàn)批量插入圖片,本文通過實例代碼給大家介紹了easyexcel文檔處理工具、自定義圖片處理器的相關知識,需要的朋友可以參考下2022-04-04關于SpringBoot獲取IOC容器中注入的Bean(推薦)
本文通過實例代碼給大家詳解了springboot獲取ioc容器中注入的bean問題,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-05-05Springboot如何使用@Async實現(xiàn)異步任務
這篇文章主要介紹了Springboot如何使用@Async實現(xiàn)異步任務問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09