日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

移动IM开发指南1:如何进行技术选型

發布時間:2025/3/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动IM开发指南1:如何进行技术选型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《移動IM開發指南》系列文章將會介紹一個IM APP的方方面面,包括技術選型、登陸優化等。此外,本文作者會結合他在網易云信多年iOS IMSDK開發的經驗,深度分析實際開發中的各種常見問題。

?

推薦閱讀

移動IM開發指南2:心跳指令詳解

移動IM開發指南3:如何優化登錄模塊

?

?

通訊方式選擇

IM通訊方式無非兩種選擇:設備直連(P2P)和通過服務器中轉。

(1)P2P

P2P多見于局域網內聊天工具,典型的應用有:飛鴿傳書等。這類軟件在啟動后一般做兩件事情:

l? 進行UDP廣播:發送自己信息和接受同局域網內其他端信息

l? 開啟TCP監聽:等待其他端進行連接

詳細的流程可以參考飛鴿傳書源碼。但是這種方式在有種種限制和不便:一方面它只適合在線的點對點消息傳輸,對離線,群組等業務支持不夠。另一方面由于 NAT 的存在,使得不同局域網內機器互聯難度大大上升,在某些網絡類型(對稱NAT)下無法建立連接。

(2)服務器中轉

幾乎所有互聯網IM產品都采用服務器中轉這種方式進行消息傳輸,相對于P2P的方式,它有如下的優點:

l? 能夠支持更多P2P無法支持或支持不好的業務,如離線消息,群組,聊天室服務

l? 方便業務邏輯的拓展和新舊版本的兼容

當然它也有自己的問題:服務器架構復雜,并發要求高。

?

網絡連接方式

IM主流網絡連接方式有兩種:

l? 基于TCP的長連接

l? 基于HTTP短連接PULL的方式

后者常見于WEB IM系統(當然現在很多WEBIM都是基于WebSocket實現),它的優點是實現簡單,方便開發上手,問題是流量大,服務器負載較大,消息及時性無法很好地保證,對大規模的用戶量支持不夠,比較適合小型的IM系統,如小網站的客戶系統。

基于TCP長連接則能夠更好地支持大批量用戶,問題是客戶端和服務器的實現比較復雜。當然也還有一些變種,如下行使用MQTT進行服務器通知/消息的下發,上行使用HTTP短連接進行指令和消息的上傳。這種方式能夠保證下行消息/指令的及時性,但是在弱網絡下上行慢的問題還是比較嚴重。早期的來往就是基于這種方式。

?

協議選擇

IM協議選擇原則一般是:易于拓展,方便覆蓋各種業務邏輯,同時又比較節約流量。后一點的需求在移動端IM上尤其重要。

常見的協議有:XMPP;SIP;MQTT;私有協議。

l? XMPP協議的優點在于:協議開源,可拓展性強,在各個端(包括服務器)有各種語言的實現,開發者接入方便。

但是缺點也是不少:XML表現力弱,有太多冗余信息,流量大,實際使用時有大量天坑。

l? SIP協議多用于VOIP相關的模塊,是一種文本協議,由于我并沒有實際用過,所以不做評論,但從它是文本協議這一點幾乎可以斷定它的流量不會小。

l? MQTT的優點是協議簡單,流量少,但是它并不是一個專門為IM設計的協議,多使用于推送。

l? 市面上幾乎所有主流IM APP都是使用私有協議,一個被良好設計的私有協議一般有如下優點:高效,節約流量(一般使用二進制協議),安全性高,難以破解。缺點則是在開發初期沒有現有樣列可以參考,對于設計者的要求比較高。

一個好的協議需要滿足如下條件:高效,簡潔,可讀性好,節約流量,易于拓展,同時又能夠匹配當前團隊的技術堆棧。基于如上原則,我們可以推出: 如果團隊小,團隊技術在IM上積累不夠可以考慮使用XMPP或者MQTT+HTTP短連接的實現。反之可以考慮自己設計和實現私有協議。

?

私有協議的設計

l? 序列化選擇

移動互聯網相對于有線網絡最大特點是:帶寬低,延遲高,丟包率高和穩定性差,流量費用高。所以在私有協議的序列化上一般使用二進制協議,而不是文本協議。常見的二進制序列化庫有protobuf和MessagePack,當然你也可以自己實現自己的二進制協議序列化和反序列的過程,比如蘑菇街的TeamTalk。但是前面二者無論是可拓展性還是可讀性都完爆TeamTalk(TeamTalk連Variant都不支持,一個int傳輸時固定占用4個字節),所以大部分情況下還是不推薦自己去實現二進制協議的序列化和反序列化過程。

l? 協議格式設計

基于TCP的應用層協議一般都分為包頭和包體(如HTTP),IM協議也不例外。包頭一般用于表示每個請求/反饋的公共部分,如包長,請求類型,返回碼等。 而包頭則填充不同請求/反饋對應的信息。

一個最簡單的包頭可以定義為


以心跳包為例,假設當前的serial為1,心跳包的command為10,那么使用MessagePack做序列化時:length=4,serial=1,command=10,code=0,每個字段各占一個字節,包體為空,僅需要4個字節。

當然這是最簡單的一個例子,面對真正的業務邏輯時,包體里面會需要塞入更多地信息,這個需要開發根據自己的業務邏輯總結公共部分,如為了兼容加入的協議版本號,為了負載均衡加入的模塊id等。

?

上面就是IM系統大致的選型過程,包含了通訊方式,連接方式,協議選擇,協議設計。但是實際開發過程中還有大量的問題需要處理。《移動IM開發指南》系列文章第二篇將會為大家解答實際開發中的常見問題。

總結

以上是生活随笔為你收集整理的移动IM开发指南1:如何进行技术选型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本成人动漫在线观看 | 国产成人一区二区三区视频 | 久久久久国产精品国产 | 亚洲影院一区二区三区 | 蜜桃成熟时李丽珍国语 | 91传媒视频在线观看 | 91在线网 | 国产一区二区在线精品 | 欧美色人阁 | 男人的亚洲天堂 | 91亚洲国产成人精品一区二三 | 精品久久久久中文慕人妻 | 黄色特级毛片 | 欧美一级高清片 | 午夜在线观看影院 | 激情啪啪网站 | 激情综合站 | 欧美成人一区二区三区高清 | 好吊一区二区三区 | 国产综合在线视频 | 中文字幕久久精品 | 西野翔夫の目の前で犯在线 | 成年人午夜网站 | 精品一区二区久久 | 丰满人妻一区二区三区免费 | 宅男av| 理论片在线观看视频 | 亚洲国产精品欧美久久 | 91精品国产综合久久精品图片 | 麻豆传媒在线 | 欧美日韩操 | 欧美色图亚洲自拍 | 亚洲av片不卡无码久久 | 永久免费在线 | 欧美日韩3p | 成人无遮挡 | 欧美一区二区三区四区视频 | 自拍偷拍精品视频 | 91伦理 | 国产高清露脸 | 国产成人精品三级麻豆 | 久久国产成人精品国产成人亚洲 | 国产小视频网址 | 九九热视 | 国产男女网站 | 国产欧美日韩精品区一区二污污污 | 午夜秋霞 | 久久久久久久久久一区 | 午夜宅男网 | 美女扒开尿口给男人看 | √天堂资源地址在线官网 | 欧美成人免费观看视频 | 外国电影免费观看高清完整版 | 男男巨肉啪啪动漫3d | 国产在线观看 | 亚洲一二三区视频 | 91精品国产91久久久久久久久久久久 | 精东影业一区二区三区 | 四色在线 | 四虎黄色影院 | 91色在线播放 | 欧美精品一级在线观看 | 91伦理视频 | 国产自产在线视频 | www.在线观看麻豆 | 欧美日韩精品一区二区三区四区 | 男ji大巴进入女人的视频 | 欧美美女一区二区三区 | 蜜臀av无码一区二区三区 | 殴美一级视频 | 国产久久精品 | 激情高潮呻吟抽搐喷水 | 亚洲另类自拍 | 国产一区二区在线播放视频 | 国产日韩一区二区在线观看 | 国产成人综合视频 | 在线日韩 | 一道本在线播放 | 亚洲免费观看高清 | 国产亚洲黄色片 | 日本囗交做爰视频 | 国产一线在线观看 | 开心激情网站 | 九九久久免费视频 | 神马午夜一区 | 亚洲图片自拍偷拍区 | 影音先锋每日资源 | 亚洲伦理影院 | 综合久久婷婷 | 成人精品免费在线观看 | 黄色xxxxx | 最近2019中文字幕大全第二页 | 欧美日韩国产精品综合 | 亚洲激情视频小说 | 在线只有精品 | 国产亚洲成av人在线观看导航 | 欧美人与动性xxxxx杂性 | 国产无码精品合集 | 日本特黄视频 |