? ? 了解完需求执俩,開(kāi)始做方案設(shè)計(jì)徐钠,最開(kāi)始面臨的選擇之一,需要使用什么樣的基礎(chǔ)協(xié)議役首。IM系統(tǒng)也是一樣尝丐,市面上可以被用來(lái)開(kāi)發(fā)IM通訊系統(tǒng)的協(xié)議還是比較多。這里我先一一列舉下:
? ? SIP:
? ? ? ? 用來(lái)幫助提供跨越因特網(wǎng)的電話業(yè)務(wù)衡奥,一般網(wǎng)絡(luò)電話業(yè)務(wù)會(huì)選擇該協(xié)議完成業(yè)務(wù)爹袁。協(xié)議定義了發(fā)起呼叫,對(duì)方振鈴矮固,開(kāi)始接聽(tīng)失息,會(huì)話建立等諸多流程,而且還非常成熟档址。會(huì)話建立完成后盹兢,就可以走數(shù)據(jù)通訊了,可以用它來(lái)完成單聊多人聊天業(yè)務(wù)守伸。
? ? ? ? 優(yōu)點(diǎn):用來(lái)做會(huì)話內(nèi)聊天绎秒,視頻通話,語(yǔ)音通話業(yè)務(wù)還是一個(gè)不錯(cuò)的選擇尼摹。一款標(biāo)準(zhǔn)化的協(xié)議见芹,支持該協(xié)議的開(kāi)源工具將會(huì)很多。
? ? ? ? 缺點(diǎn):如果只是用來(lái)做單聊蠢涝,多人聊天類似的業(yè)務(wù)的話玄呛,因?yàn)榇罅康慕换ト哂啵瑢⒂羞^(guò)多的流量消耗惠赫,移動(dòng)端APP對(duì)于流量和耗電量的損耗是特別看重的把鉴。
? ? ? 私有RPC:
? ? ? ? 一般采用TCP協(xié)議,高層的協(xié)議需要自己定義,包括公用的協(xié)議頭部分和數(shù)據(jù)部分庭砍,
? ? ? ? 優(yōu)點(diǎn):是能根據(jù)業(yè)務(wù)場(chǎng)景進(jìn)行協(xié)議定制场晶,做到節(jié)省流量,減少交互次數(shù)怠缸。
? ? ? ? 缺點(diǎn):如果定義者經(jīng)驗(yàn)不夠的話诗轻,協(xié)議局限性比較強(qiáng),到后期極有可能制約業(yè)務(wù)需求發(fā)展揭北。協(xié)議相關(guān)的SERVER端CLIENT端協(xié)議棧需要自己開(kāi)發(fā)扳炬,這塊需要投入大量的人物力。
? ? ? XMPP:
? ? ? ? XMPP的前身是Jabber搔体,一個(gè)開(kāi)源形式組織產(chǎn)生的網(wǎng)絡(luò)即時(shí)通信協(xié)議恨樟。借助于XML易于解析和閱讀的特性,使得XMPP的協(xié)議能夠非常漂亮疚俱。 XMPP的即時(shí)通訊擴(kuò)展應(yīng)用部分是根據(jù)IETF在這之前對(duì)即時(shí)通訊的一個(gè)抽象定義的劝术,與其他業(yè)已得到廣泛使用的即時(shí)通訊協(xié)議,諸如AIM呆奕,QQ等有功能完整养晋,完善等先進(jìn)性。
? ? ? ? 優(yōu)點(diǎn):業(yè)界使用很廣的協(xié)議梁钾,有大量的開(kāi)源實(shí)現(xiàn)绳泉,能幫助快速的開(kāi)發(fā)高質(zhì)量的應(yīng)用。
? ? ? ? 缺點(diǎn):這個(gè)協(xié)議因?yàn)槭腔赬ML的姆泻,所以對(duì)于流量損耗和網(wǎng)絡(luò)帶寬的要求還是比較高零酪,所以他一直被用于PC電腦的上IM應(yīng)用上面。
? ? ? SYMCML:
? ? ? ? 一個(gè)簡(jiǎn)單麦射、通用的可以用于工業(yè)界方面的數(shù)據(jù)同步協(xié)議蛾娶。使用了該款協(xié)議的有FOXMAIL,
? ? ? ? 優(yōu)點(diǎn):對(duì)于多設(shè)備同時(shí)使用潜秋,能給與很好的支持蛔琅。
? ? ? ? ? 缺點(diǎn):協(xié)議本身就比較復(fù)雜,交互流程比較多峻呛,用戶流量消耗比較大罗售。不過(guò)基于該協(xié)議思想改進(jìn)后的效果還是很好的,如WECHAT钩述,F(xiàn)OXMAIL
? ? ? MQTT:
IBM提出一種輕量級(jí)的寨躁,適合于低帶寬、不可靠連接牙勘、嵌入式設(shè)備职恳、CPU所禀、內(nèi)存資源緊張,適用于各種受限的環(huán)境的傳輸協(xié)議放钦。最早使用于心臟起搏器的質(zhì)量狀態(tài)監(jiān)控上色徘。
優(yōu)點(diǎn):
有明確定義服務(wù)質(zhì)量,對(duì)于不同的質(zhì)量有不同交互流程要求操禀。
包體流量占用小褂策,對(duì)于每個(gè)字節(jié)都有精確的定義。
有大量的開(kāi)源實(shí)現(xiàn)颓屑,能幫助快速的開(kāi)發(fā)高質(zhì)量的應(yīng)用斤寂。
缺點(diǎn):
協(xié)議本身不是基于IM業(yè)務(wù)設(shè)計(jì)的,一款基于二進(jìn)制的協(xié)議揪惦,對(duì)于字節(jié)定義缺乏可擴(kuò)展性遍搞,有時(shí)需要你在產(chǎn)品需求和標(biāo)準(zhǔn)協(xié)議實(shí)現(xiàn)上做出一些權(quán)衡。
比如:publish應(yīng)答不能帶payload器腋,如果想通過(guò)應(yīng)答獲得該條消息的系統(tǒng)時(shí)間尾抑,得想其他的辦法。
? ? ? 總結(jié):
? ? ? ? 對(duì)于開(kāi)發(fā)一款基于IM為基礎(chǔ)通訊的APP蒂培,沒(méi)有一層不變的選擇,我們只有根據(jù)產(chǎn)品需求榜苫,項(xiàng)目時(shí)間要求护戳,去選擇一款最合適的協(xié)議來(lái)開(kāi)發(fā)我們的應(yīng)用。