精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

移動IM開發那些事:技術選型和常見問題

移動開發
最近在做一個iOS IM SDK,內測版已出爐。在內部試用的階段,不斷有兄弟部門或者合作伙伴過來問各種技術細節,所以統一寫一篇文章記錄,統一介紹下一個IM APP的方方面面,包括技術選型(包括通訊方式,網絡連接方式,協議選擇)和常見問題。

[[134897]]

最近在做一個iOS IM SDK,內測版已出爐,詳見http://netease.im。在內部試用的階段,不斷有兄弟部門或者合作伙伴過來問各種技術細節,所以統一寫一篇文章記錄,統一介紹下一個IM APP的方方面面,包括技術選型(包括通訊方式,網絡連接方式,協議選擇)和常見問題。
 

通訊方式選擇

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

P2P

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

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

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

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

服務器中轉

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

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

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

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

網絡連接方式

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

  • 基于TCP的長連接

  • 基于HTTP短連接PULL的方式

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

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

協議選擇

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

常見的協議有:

XMPP協議的優點在于:協議開源,可拓展性強,在各個端(包括服務器)有各種語言的實現,開發者接入方便。但是缺點也是不少:XML表現力弱,有太多冗余信息,流量大,實際使用時有大量天坑。

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

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

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

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

私有協議的設計

序列化選擇

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

協議格式設計

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

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

  1. struct PackHeader  
  2. {  
  3.     int32_t     length_;    //包長度  
  4.     int32_t     serial_;    //包序列號  
  5.     int32_t     command_;   //包請求類型  
  6.     int32_t     code_;      //返回碼  
  7. }; 

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

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

其他問題

上面就是一個IM系統大致的選型過程:通訊方式,連接方式,協議選擇,協議設計。但是實際開發過程中還有大量的問題需要處理。

協議加密

為了保證協議不容易被破解,市面上幾乎所有主流IM都會對協議進行加密傳輸。常見的流程和HTTPS加密相似:建立連接后,客戶端和服務器進行進行協商,最終客戶端獲得一個當前Sessino的秘鑰,后續的數據傳輸都通過這個秘鑰進行加解密。一般出于效率的考慮都會采用流式加密,如RC4。而前期協商過程則推薦使用AES等非對稱加密以增加破解難度。

快速連接(登錄)

對iOS APP而言,因為沒有真后臺的存在,APP每次啟動基本都需要一次重連登錄(短時間內切換除外),所以如何快速重連重登就非常重要。常見的優化思路如下:

  • 本地緩存服務器IP并定期刷新。移動網絡調優可以參考《iOS移動網絡調優那些事》

  • 合并部分請求。如加密和登錄操作可以合并為同一個操作,這樣就可以減少一次不必要的網絡請求來回的時間。

  • 簡化登錄后的同步請求,部分同步請求可以推遲到UI操作時進行,如群成員信息刷新。

連接保持

一般APP實現連接保持的方式無非是采用應用層的心跳,通過心跳包的超時和其他條件(網絡切換)來執行重連操作。那么問題來了:為什么要使用應用層心跳和如何設計應用層心跳。

眾所周知TCP協議是有KEEPALIVE這個設置選項,設置為KEEPALIVE后,客戶端每隔N秒(默認是7200s)會向服務器發送一個發送心跳包。但實際操作中我們更多的時是使用應用層心跳。原因如下:

  • KEEPALIVE對服務器負載壓力比較大(服務器大大是這么說的...)

  • socks代理對KEEPALIVE并不支持

  • 部分復雜情況下KEEPALIVE會失效,如路由器掛掉,網絡直接被拔除

移動端在實際操作時為了節約流量和電量一般會在心跳包上做一些小優化

  • 盡量精簡心跳包,保證一個心跳包大小在10字節之內

  • 心跳包只在空閑時發送 (收到最后一個數據包n秒內再也沒有收到包則進行一次心跳)

  • 根據APP前后臺狀態調整心跳包間隔 (主要是安卓)

消息可達

在移動網絡下,丟包,網絡重連等情況非常之多,為了保證消息的可達,一般需要做消息回執和重發機制。參考易信,每條消息會最多會有3次重發,超時時間為15秒,同時在發送之前會檢測當前連接狀態,如果當前連接并沒有正確建立,緩存消息切定時檢查(每隔2秒檢查一次,檢查15次)。所以一條消息在最差的情況下會有2分多的重試時間,以保證消息的可達。

因為重發的存在,接受端偶爾會收到重復的兩條消息,這種情況下就需要接收端進行去重。一般的做法是每條消息都有自己唯一的message id(一般是uuid)。

文件上傳優化

IM消息(包括SNS模塊)內包含大量的文件上傳的需求,如何優化文件的上傳就成了一個比較大的主題。常見有下面這些優化思路:

  • 將上傳流程提前:音頻提供邊錄邊傳。朋友圈的圖片進行預上傳,選擇圖片后用戶一般會進行文本輸入,在這段時間內后臺就可以默默將選好的圖片進行上傳。

  • 提供閃電上傳的方式:服務器根據MD5進行文件去重。

  • 優化和上傳服務器的連接(參考快速連接),提供連接重用的功能。

  • 文件分塊上傳:因為移動網絡丟包嚴重,將文件分塊上傳可以使得一個分組包含合理數量的TCP包,使得重試概率下降,重試代價變小,更容易上傳到服務器。

  • 在分包的前提下支持上傳的pipeline,避免不必要的網絡等待時間。

  • 支持斷點續傳

責任編輯:林師授 來源: 阿毛的蛋疼地
相關推薦

2015-04-13 17:39:11

移動IM開發

2012-08-30 09:41:23

移動應用開發

2015-06-23 14:39:01

技術周刊

2012-03-06 08:47:40

Corona

2020-10-18 12:00:27

前端開發架構

2018-11-14 14:18:26

APP網絡分析

2010-09-13 14:43:47

無線技術常見問題

2009-07-17 10:01:14

Swing和AWT

2024-07-01 08:23:20

2011-04-01 13:55:24

Java

2013-11-14 15:47:29

SDN問題答疑

2011-05-06 15:39:55

硒鼓

2010-07-21 09:10:02

Perl常見問題

2010-05-12 17:04:20

BlackBerry開

2010-08-31 16:01:18

CSS

2018-04-10 15:10:34

Windows64位32位

2023-02-08 08:40:21

2011-04-08 13:58:52

JavaJSP

2011-09-07 10:36:58

ubuntuUbuntuOne

2012-07-13 00:03:08

WEB前端開發WEB開發
點贊
收藏

51CTO技術棧公眾號

懂色av一区二区三区四区| 男人av资源站| 欧美大片免费高清观看| 中文字幕精品一区二区精品绿巨人 | 午夜精品久久久久久久白皮肤| 三上悠亚 电影| 手机在线观看av| 国产精品素人视频| 国产精品久久久久久久久久久久冷 | www.久久av.com| av人人综合网| 国产精品乱码一区二区三区软件 | 91国内精品视频| 亚洲国产二区| 日韩中文字幕av| 视频免费在线观看| 色8久久久久| 日韩欧美999| 精品免费久久久久久久| 九色视频在线播放| 成人精品免费视频| 国产综合香蕉五月婷在线| 午夜写真片福利电影网| 精品99久久| 亚洲福利视频久久| 欧美视频亚洲图片| 成人国产综合| 欧美日韩国产页| 一区二区三区四区国产| 亚洲人成色777777老人头| 国产真实乱对白精彩久久| 国产成人精品电影| www.国产成人| 欧美视频成人| 欧美另类交人妖| jizz18女人高潮| 亚洲综合图色| 亚洲国产欧美自拍| 在线成人精品视频| 亚洲国产综合在线观看| 在线观看日韩高清av| 欧美牲交a欧美牲交| 免费男女羞羞的视频网站在线观看| 中文字幕 久热精品 视频在线| 久久艳妇乳肉豪妇荡乳av| 丰满人妻一区二区三区免费视频 | 国产在线一二三区| wwwwxxxxx欧美| 精品乱子伦一区二区三区| 亚洲精品97久久中文字幕| 国产美女一区二区三区| 成人黄色免费片| 国产一区二区在线播放视频| 日产欧产美韩系列久久99| 国产999精品视频| 国产乱国产乱老熟| 久久国产主播| 国产精品99久久99久久久二8| 国产成人免费看| 国产亚洲福利| 国产97免费视| 成人免费毛片男人用品| 老司机午夜精品视频在线观看| 欧美性资源免费| www.国产com| 丝袜美腿亚洲综合| 国产精品久久久久久av福利软件| 亚洲大片免费观看| 日本一区中文字幕| 成人黄色大片在线免费观看| 99热这里只有精品3| 国产福利一区二区| 国产一区再线| 精品久久久久一区二区三区| 欧美高清在线一区| 久久久一二三四| 超碰97免费在线| 欧美色视频日本高清在线观看| 日韩伦理在线免费观看| 午夜久久中文| 欧美日本在线观看| 91精品人妻一区二区三区蜜桃2| 136福利精品导航| 日韩电影中文字幕一区| 国产美女永久免费无遮挡| 日本一区二区三区视频| 欧美黑人极品猛少妇色xxxxx| 久久久精品91| 久久久久国产一区二区| 成人激情av在线| 日本精品久久久久久| 久久久精品欧美丰满| 国产又大又长又粗又黄| a级片免费在线观看| 色天使色偷偷av一区二区| 国产永久免费网站| 女仆av观看一区| www.色综合| 日韩成人免费观看| 蓝色福利精品导航| 精品一区久久久久久| 9色在线视频| 亚洲成人动漫一区| 中文字幕亚洲乱码| 色天下一区二区三区| 色偷偷偷亚洲综合网另类| 99精品视频99| 国产一区二区三区久久久| 麻豆成人av| 日本电影在线观看| 欧美性xxxxxx少妇| 国产毛片毛片毛片毛片毛片毛片| 久久精品播放| 欧美诱惑福利视频| 国产成人三级在线观看视频| 欧美激情一区在线| 欧美精品99久久| 亚洲一区有码| 亚洲男人av电影| 久久av高潮av无码av喷吹| 日韩在线卡一卡二| 精品欧美日韩| 肉体视频在线| 欧美高清www午色夜在线视频| 国产熟妇搡bbbb搡bbbb| 亚洲午夜一区| 成人女人免费毛片| a视频在线免费看| 欧美视频自拍偷拍| 国产美女精品久久| 亚洲黄色影院| av一区二区三区在线观看| 免费a级人成a大片在线观看| 一本久久a久久精品亚洲| 人妻av一区二区| 欧美日韩a区| 亚洲iv一区二区三区| 色多多视频在线观看| 欧美系列一区二区| 日本爱爱爱视频| 久久久蜜桃一区二区人| 欧美精品一区二区三区四区五区| av在线网页| 亚洲国产精品va在线观看黑人| 激情五月婷婷小说| 国产福利91精品| 日本精品福利视频| 日韩精品三级| 欧美第一黄网免费网站| 精品人妻一区二区三区日产乱码 | 婷婷视频在线播放| 91精品麻豆| 欧美理论电影在线观看| 性生活视频软件| 亚洲一区成人在线| 亚洲少妇18p| 亚洲综合精品| 欧洲精品在线一区| 97人人做人人爽香蕉精品| 最近2019年日本中文免费字幕 | 精品不卡在线视频| 久久精品无码人妻| 99久久综合国产精品| 缅甸午夜性猛交xxxx| 日本精品影院| 国产精品第一区| 日本免费在线视频| 日韩一区二区三区精品视频| 久久免费精彩视频| 2020国产精品久久精品美国| 黄色成人免费看| 天天影视天天精品| 高清视频一区二区三区| 久久久男人天堂| 一个人看的www久久| 91高潮大合集爽到抽搐| 亚洲一区二区在线免费观看视频| 日韩综合第一页| 日韩不卡手机在线v区| 中文字幕在线中文字幕日亚韩一区| 成人动漫视频在线观看| 久久久视频精品| 国产中文在线观看| 日韩一级完整毛片| 黄色在线观看国产| 亚洲欧洲三级电影| 国产chinese中国hdxxxx| 美女国产一区| 日本黄xxxxxxxxx100| 农村少妇一区二区三区四区五区| 国产精品91视频| 亚洲资源一区| 亚洲欧美日韩精品久久亚洲区| 91国内精品久久久| 精品美女国产在线| 午夜剧场免费在线观看| av午夜一区麻豆| 亚洲精品www.| 国产精品老牛| 中文字幕の友人北条麻妃| 九九热爱视频精品视频| 成人自拍性视频| 亚洲欧美一区二区三区| 美女少妇精品视频| 精品乱码一区二区三四区视频| 日韩一区二区在线免费观看| 亚洲不卡在线视频| 一级特黄大欧美久久久| av免费播放网站| k8久久久一区二区三区| 亚洲人视频在线| 亚洲欧美日韩综合国产aⅴ| 国产又黄又爽免费视频| 综合亚洲自拍| 国产精品久久久对白| 日本免费成人| 国产成人精品日本亚洲| 午夜成年人在线免费视频| 色噜噜久久综合伊人一本| 视频二区在线| 欧美成人高清电影在线| 一区二区 亚洲| 91黄色在线观看| 天天操天天摸天天干| 一区二区三区四区在线| 最新日韩免费视频| 日本一区二区三区在线观看| 88av在线播放| 成人av在线网| 国产精品99久久久精品无码| 久久成人免费日本黄色| 手机在线成人免费视频| 久久婷婷丁香| aaaaaa亚洲| 99热免费精品在线观看| 欧美中文字幕在线观看视频| 亚洲啊v在线观看| 亚洲一区二区三区精品视频 | 福利一区二区在线| 色偷偷中文字幕| 国产自产2019最新不卡| 粉色视频免费看| 久久电影网站中文字幕| 性猛交ⅹ×××乱大交| 免费视频最近日韩| 亚洲成人天堂网| 蜜臀av一级做a爰片久久| 女人另类性混交zo| 丝袜亚洲另类丝袜在线| wwwwww.色| 麻豆精品久久精品色综合| 亚洲综合色在线观看| 美国一区二区三区在线播放 | 亚洲欧美综合久久久久久v动漫| 国产精品在线看| 日韩黄色三级在线观看| 91免费欧美精品| 亚洲一区二区三区中文字幕在线观看| 91中文字幕在线| 亚洲开心激情| 国产精品一区二区在线观看| 欧美日韩一区二区三区在线电影| 久久久影院一区二区三区| 亚洲色图丝袜| 视频在线一区二区三区| 国产精品久久久久久影院8一贰佰| 一本久久a久久精品vr综合| 综合天堂久久久久久久| av在线观看地址| 久久香蕉精品| 91福利免费观看| 国产二区国产一区在线观看| 无码国产精品一区二区免费式直播| av在线播放成人| 免费观看a级片| 亚洲精品中文在线影院| 日本少妇xxxx动漫| 欧美性高清videossexo| 国产免费黄色大片| 亚洲国产一区二区三区四区| 国产精品一级伦理| 免费av一区二区| 日韩伦理在线| 成人免费观看网址| 亚洲理论电影| 日本特级黄色大片| 在线亚洲欧美| 亚洲一区精品视频在线观看| 成人国产亚洲欧美成人综合网| 国产手机在线观看| 亚洲欧美日韩久久精品| 亚洲永久精品在线观看| 欧美日本高清视频在线观看| 免费激情视频网站| 在线播放国产精品| 好吊日av在线| 国产欧美韩国高清| 久久国产精品免费精品3p| 亚洲精品日韩在线观看| 伊人久久久大香线蕉综合直播| 91淫黄看大片| a在线播放不卡| 三级av在线免费观看| 欧美性黄网官网| 午夜久久久久久噜噜噜噜| 亚洲午夜未删减在线观看| 最爽无遮挡行房视频在线| 国产精品h在线观看| 国产成人在线中文字幕| 9999在线观看| 日韩av一区二| 18禁裸乳无遮挡啪啪无码免费| 亚洲视频小说图片| 国产一级片免费视频| 亚洲黄色在线看| 欧美草逼视频| 91沈先生在线观看| 日韩欧美三级| 久久精品视频91| 91小视频在线免费看| 久久网一区二区| 欧美一级高清大全免费观看| chinese偷拍一区二区三区| 97免费在线视频| 午夜久久av| 国产一区二区三区播放| 久久国产精品72免费观看| 三上悠亚影音先锋| 欧美日韩一区二区在线播放| 成人午夜免费在线观看| 欧美巨大黑人极品精男| 91麻豆精品国产综合久久久| 婷婷久久五月天| 日韩成人av影视| 国产综合精品在线| 在线日韩一区二区| 国产主播福利在线| 国产成人欧美在线观看| 亚洲欧美校园春色| aa在线免费观看| 91麻豆免费视频| 影音先锋在线国产| 亚洲欧美日本另类| 婷婷六月国产精品久久不卡| 久久伦理网站| 美女视频一区免费观看| 90岁老太婆乱淫| 欧美视频在线不卡| h视频在线观看免费| 国产精品亚发布| 夜间精品视频| 亚洲AV成人精品| 亚洲1区2区3区4区| 色鬼7777久久| 国产精品精品视频一区二区三区| 欧美精选视频在线观看| 黄色三级视频在线| 专区另类欧美日韩| 午夜精品久久久久久久第一页按摩 | 在线免费播放av| 红桃视频成人在线观看| 午夜性色福利影院| 国产91在线播放精品91| av在线不卡顿| 一区二区三区四区毛片| 一区二区在线电影| 日韩欧美一区二区三区在线| 欧美视频一二区| 欧美专区日韩视频| 欧美先锋资源| 免费精品99久久国产综合精品应用| 亚洲欧洲av另类| 韩国av免费在线| 日本欧美国产在线| 91综合久久| 日本一卡二卡在线| 欧洲人成人精品| 中文字幕资源网在线观看| 国产精品一区二区免费| 日日摸夜夜添夜夜添精品视频| 美国一级黄色录像| 欧美第一区第二区| 在线一区av| 日本一本草久p| 99久久久无码国产精品| 国产情侣免费视频| 欧美大尺度激情区在线播放| 台湾色综合娱乐中文网| 日本不卡一区二区在线观看| 亚洲国产一区二区在线播放| 六十路在线观看| 99电影在线观看| 日本特黄久久久高潮| 劲爆欧美第一页| 伊人伊人伊人久久| 大伊香蕉精品在线品播放| 最近中文字幕一区二区| 亚洲国产精品久久久久婷婷884 | 免费一级欧美在线大片| 久久久久久久久久久视频|