即時(shí)通訊(im)框架/系統(tǒng)開發(fā)思考(1)-通訊協(xié)議選型

1.前言:

近來筆者接到公司的一個(gè)IM開發(fā)需要,要在原來的Web業(yè)務(wù)系統(tǒng)昔期、移動(dòng)端系統(tǒng)上加入一個(gè)即時(shí)聊天的功能俐芯,具有就是能聊天就行。相信各位也會(huì)接到需要開發(fā)IM的系統(tǒng)的任務(wù),那么缓升,開發(fā)一個(gè)im系統(tǒng)應(yīng)選用哪種通訊協(xié)議?

2.思考-即時(shí)聊天選用的通訊協(xié)議選哪種:

XMPP(可擴(kuò)展消息與存在協(xié)議): 是一個(gè)成熟開源的即時(shí)聊天協(xié)議, 基于XMPP的開源技術(shù)有openfire(后臺(tái)端), spark(客戶端)
優(yōu)勢: 比較成熟的聊天協(xié)議,已在XMPP協(xié)議內(nèi)支持單聊, 群聊, 加好友等功能.滿足基本的需要.
缺點(diǎn): 基于xml 實(shí)現(xiàn)的通訊協(xié)議, 消息載體比較重, 增加網(wǎng)絡(luò)流量, 定制困難鼓鲁,需要了解openfire原理, 改造有一定的難度。
跨平臺(tái): 一般, 僅基于java平臺(tái), 如要實(shí)現(xiàn)web 等需要自己使用socket進(jìn)行xml封裝.

MQTT(消息隊(duì)列遙測傳輸): 嚴(yán)格來說, MQTT是使用與物聯(lián)網(wǎng)領(lǐng)域的消息傳輸協(xié)議港谊,但有一些即時(shí)通訊系統(tǒng)也使用這個(gè)協(xié)議進(jìn)行拓展開發(fā)骇吭,故拎出來說說。MQTT主要有三個(gè)特點(diǎn): 1. 基于發(fā)布訂閱模式; 2. 為網(wǎng)絡(luò)不可靠的環(huán)境下提供一套消息重傳協(xié)議.3. 基于TCP/IP, 消息載體輕, 耗電量小.
優(yōu)勢: 已實(shí)現(xiàn)消息丟失重傳功能, 消息載體輕, 耗電量小.
缺點(diǎn): 不是專用于聊天的協(xié)議, 登錄, 單聊, 群聊, 加好友等功能都需要自己實(shí)現(xiàn). 開發(fā)成本高歧寺,如要支持多個(gè)平臺(tái), 每個(gè)客戶端都需要定制燥狰,IM方面的開源社區(qū)不活躍奖唯,技術(shù)文檔少板惑。
跨平臺(tái): 差, 每個(gè)客戶端都需要實(shí)現(xiàn)MQTT的聊天協(xié)議。

自定義協(xié)議: 可以基于WebSocket刘莹, socket.io顷链, 甚至常用的消息隊(duì)列: RabbitMQ目代, RocketMQ 等長連接框架上加入聊天的業(yè)務(wù), 比如登錄嗤练, 單聊榛了, 群聊, 加好友等功能煞抬。
優(yōu)勢: 基于自己熟悉的技術(shù)棧霜大,易上手。
缺點(diǎn): 單聊革答, 群聊战坤, 加好友等功能都需要自己實(shí)現(xiàn)。
跨平臺(tái): 一般残拐, 若選用廣泛使用于客戶端的WebSocket途茫, socket.io,能很好的實(shí)現(xiàn)跨平臺(tái)性蹦骑。

考慮到日后的跨平臺(tái)定制開發(fā)慈省,最終敲定選用socket.io + 自定義協(xié)議實(shí)現(xiàn)。為什么要選用socket.io眠菇?不用WebSocket边败?

  1. socket.io設(shè)計(jì)的目標(biāo)是支持任何的瀏覽器,任何設(shè)備捎废。在接口方面笑窜,socket.io統(tǒng)一了通信的API,在內(nèi)部實(shí)現(xiàn)上支持WebSocket登疗,AJAX long-polling排截, AJAX multipart streaming嫌蚤, Forever Iframe等方式。也就是說断傲,Socket.io會(huì)根據(jù)環(huán)境來選擇適合的通信方式脱吱。
  2. socket.io 支持namespace, room 等概念,可以很方便的對socket 進(jìn)行分組认罩。
  3. socket.io 具有自動(dòng)重連的功能箱蝠,適用于惡劣的網(wǎng)絡(luò)環(huán)境。

而e聊sdk正是基于socket.io上開發(fā)的免費(fèi)開源即時(shí)通訊框架垦垂,e聊sdk 已實(shí)現(xiàn)了多平臺(tái)的socket.io 支持(如:Web宦搬, ReactNative, 微信小程序等)劫拗, 閱讀e聊客戶端核心sdk 的源碼中间校, 可見到在socket.ts 文件中已實(shí)現(xiàn)了多平臺(tái)的socket.io 支持:

        /*IFTRUE_WEBAPP*/
        const webio = require('socket.io-client');
        this。socket = webio页慷。connect(url+"");
        /*FITRUE_WEBAPP*/

        /*IFTRUE_RNAPP*/
        const rnio = require('socket.io-client');
        this憔足。socket = rnio。connect(url+""差购, {transports: ['websocket']});
        /*FITRUE_RNAPP*/

        /*IFTRUE_WXAPP*/
        const wxio = require('weapp.socket.io');
        this四瘫。socket = wxio汉嗽。connect(url+"");
        /*FITRUE_WXAPP*/

正是由于e聊sdk在設(shè)計(jì)之初已具有良好的跨平臺(tái)支持欲逃, 選擇使用e聊開發(fā)即時(shí)通訊,可以在跨平臺(tái)上實(shí)現(xiàn)事半功倍的效果饼暑。

參考:
e聊客戶端核心sdk源碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稳析,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弓叛,更是在濱河造成了極大的恐慌彰居,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撰筷,死亡現(xiàn)場離奇詭異陈惰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)毕籽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門抬闯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人关筒,你說我怎么就攤上這事溶握。” “怎么了蒸播?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵睡榆,是天一觀的道長萍肆。 經(jīng)常有香客問我,道長胀屿,這世上最難降的妖魔是什么塘揣? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮宿崭,結(jié)果婚禮上勿负,老公的妹妹穿的比我還像新娘。我一直安慰自己劳曹,他們只是感情好奴愉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铁孵,像睡著了一般锭硼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜕劝,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天檀头,我揣著相機(jī)與錄音,去河邊找鬼岖沛。 笑死暑始,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的婴削。 我是一名探鬼主播廊镜,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唉俗!你這毒婦竟也來了嗤朴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虫溜,失蹤者是張志新(化名)和其女友劉穎雹姊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衡楞,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吱雏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘾境。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歧杏。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖寄雀,靈堂內(nèi)的尸體忽然破棺而出得滤,到底是詐尸還是另有隱情,我是刑警寧澤盒犹,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布懂更,位于F島的核電站眨业,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沮协。R本人自食惡果不足惜龄捡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慷暂。 院中可真熱鬧聘殖,春花似錦、人聲如沸行瑞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽血久。三九已至突照,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氧吐,已是汗流浹背讹蘑。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筑舅,地道東北人座慰。 一個(gè)月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像翠拣,于是被迫代替她去往敵國和親版仔。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355