一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

app后端搭建聊天服務(wù)器的經(jīng)歷

 WindySky 2017-11-15


 

1. 聊天服務(wù)的技術(shù)選型

 

需要開(kāi)發(fā)聊天服務(wù),首先要選擇用到的協(xié)議,現(xiàn)在,常用的聊天協(xié)議有:

 

(1)      xmpp,一個(gè)基于xml的消息協(xié)議,被廣泛應(yīng)用于Gtalk,Facebook,但缺點(diǎn)也很明顯,由于基于xml,會(huì)產(chǎn)生大流量。

(2)      mqtt,IBM開(kāi)發(fā)的即時(shí)通訊協(xié)議,一個(gè)簡(jiǎn)單的消息協(xié)議,需要自己實(shí)現(xiàn)加好友,群聊等IM常見(jiàn)的功能

(3)      類ActivitySync,微信實(shí)現(xiàn)的協(xié)議,省流量,性能高,但由于是私有協(xié)議,IM的所有功能都需要自己實(shí)現(xiàn)。

 

Xmpp協(xié)議作為一個(gè)被廣泛使用的消息協(xié)議,有大量的網(wǎng)絡(luò)資料和成熟開(kāi)源模塊,例如在android和ios上,就很方便集成xmpp協(xié)議。IM作為一個(gè)復(fù)雜的系統(tǒng),有方方面面需要考慮,使用成熟的協(xié)議,能幫助我們避免很多問(wèn)題,提高了開(kāi)發(fā)效率。

 

同時(shí),xmpp協(xié)議的缺點(diǎn)也很明顯,基于xml,造成了費(fèi)流量。

 

不信,你瞧:

 

[plain] view plaincopy
  1. <iq id="rosterset1" type="set">  
  2. <query xmlns="jabber:iq:roster">  
  3. <item jid="user@jabbercn.org" name="user"/>  
  4. </query>  
  5. </iq>  
  6. <presence from="contact@rooyee.biz" to="user@jabbercn.org" type="subscribe"/>  

上面是xmpp協(xié)議添加好友的內(nèi)容,看到了嗎?這么簡(jiǎn)單的一個(gè)功能,用了多少字節(jié)?。?!

 

綜合上面所述,對(duì)于創(chuàng)業(yè)型的公司來(lái)說(shuō),如果需要在最短時(shí)間內(nèi)實(shí)現(xiàn)聊天功能,除了使用環(huán)信,融云等第三方IM服務(wù)外,最好是選擇xmpp協(xié)議。


         現(xiàn)在主流的實(shí)現(xiàn)了xmpp的兩個(gè)開(kāi)源項(xiàng)目:

 

(1)Ejobberd,用erlang語(yǔ)言開(kāi)發(fā),成熟穩(wěn)定,集群支持,支持多進(jìn)程高并發(fā)。但由于它是基于小眾的erlang,也造成了很高的開(kāi)發(fā)成本,例如,想招個(gè)熟悉erlang同時(shí)也熟悉聊天服務(wù)的人,很難。

 

(2)openfire, 用java開(kāi)發(fā),成熟穩(wěn)定,插件多,但是對(duì)內(nèi)存要求高,并發(fā)低,集群支持差,單機(jī)的并發(fā)就十多萬(wàn)。


         在創(chuàng)業(yè)公司里,我的建議是使用openfire,畢竟熟悉java的開(kāi)發(fā)人員還是挺多的,而且在初期,也不會(huì)有太高的并發(fā),等有錢有人后,再對(duì)聊天系統(tǒng)改造。

 

雖然,作為一名有理想有道德有職業(yè)尊嚴(yán)的后端工程師,想把聊天系統(tǒng)做好,但理想是美好的,現(xiàn)實(shí)是殘酷的。創(chuàng)業(yè)初期的環(huán)境,決定了沒(méi)法打造完善的系統(tǒng),但最起碼,使用openfire能先把聊天功能做出來(lái)。

 

2. 開(kāi)發(fā)社交app中,實(shí)現(xiàn)聊天服務(wù)踩過(guò)的坑

 

在做第一個(gè)社交app中,使用openfire除了常規(guī)的聊天外,還需要實(shí)現(xiàn)兩個(gè)功能:

(1)      未讀消息數(shù)

(2)      保存聊天記錄

 

       由于當(dāng)時(shí)不具備對(duì)openfire進(jìn)行二次開(kāi)發(fā)的能力(或者說(shuō)是因?yàn)樾拇婵謶郑?,采用了一個(gè)現(xiàn)在看起來(lái)無(wú)比傻的方案:

        

         接收消息,App端是直接連接openfire服務(wù)器;發(fā)送消息,用php封裝了相關(guān)發(fā)送消息的api,app端通過(guò)調(diào)用api來(lái)發(fā)送消息,在api層來(lái)處理”未讀消息數(shù)”和” 保存聊天記錄”。

 

          實(shí)現(xiàn)”未讀消息數(shù)”的方法:每次app打開(kāi)或退出前,調(diào)用一個(gè)api標(biāo)識(shí)該app是否在線并在redis中記錄下來(lái),在調(diào)用 發(fā)送消息的api時(shí),通過(guò)檢測(cè)一個(gè)消息,判斷是否未讀消息(發(fā)送離線的消息就是未讀消息)

 

         實(shí)現(xiàn)” 保存聊天記錄”的方法:在調(diào)用 發(fā)送消息的api時(shí),把發(fā)送的消息異步保存到數(shù)據(jù)庫(kù)。

 

         實(shí)現(xiàn)了上面兩個(gè)技術(shù)方案,體會(huì)到為了解決一個(gè)問(wèn)題引引入了無(wú)數(shù)的新問(wèn)題是啥情況了?!蔽醋x消息數(shù)”功能簡(jiǎn)直是惡夢(mèng),數(shù)字根本不準(zhǔn),特別是遇上了app閃退,斷網(wǎng)的情況下。這個(gè)功能必須要在openfire內(nèi)部去實(shí)現(xiàn),聊天服務(wù)器都有記錄相關(guān)的用戶在線狀態(tài)的。

 

         在做第二個(gè)社交app時(shí),需要實(shí)現(xiàn)“發(fā)送給ios的離線消息,用apns推送”這個(gè)功能。我吸取了第一個(gè)社交app的教訓(xùn),采用了開(kāi)發(fā)openfire插件的方法,把所有發(fā)送給ios的離線消息在openfire內(nèi)部截獲下來(lái),并用隊(duì)列傳送到apns系統(tǒng)中,愉快地解決了這個(gè)問(wèn)題。最后,把這個(gè)插件開(kāi)源,放到了我的github中(github.com/newjueqi/sendOfflineMsg)

 

3.    那些著名app的聊天服務(wù)

 

Whatsapp:

 

初期使用開(kāi)源Ejabberd服務(wù)器,使用Erlang實(shí)現(xiàn)。接下來(lái)的許多年一直從事Ejabberd的重寫(xiě)和修改,包括從XMPP轉(zhuǎn)換到內(nèi)部開(kāi)發(fā)協(xié)議、調(diào)整代碼庫(kù)以及重設(shè)計(jì)一些核心組件,對(duì)Erlang VM做了大量的修改以獲得高性能。

 

陌陌

 

         最初的一年是使用了xmpp,一年后改為私有的協(xié)議。

 

環(huán)信:

 

         對(duì)xmpp協(xié)議進(jìn)行了改造:

(1)      登錄握手的改進(jìn)

(2)      心跳的改進(jìn)

(3)      文件傳輸

(4)      在線狀態(tài)的改造

(5)      把聊天室協(xié)議改為適合移動(dòng)互聯(lián)網(wǎng)的群聊

 

 

陌生人社交應(yīng)用Whisper中文版“耳語(yǔ)”:

 

         據(jù)小道消息,把xmpp協(xié)議中的xml改為json。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    老富婆找帅哥按摩抠逼视频| 欧美韩国日本精品在线| 国产一级二级三级观看| 日韩中文无线码在线视频| 丁香七月啪啪激情综合| 又大又长又粗又猛国产精品| 91人妻人人做人碰人人九色| 日韩欧美国产精品自拍| 国产肥妇一区二区熟女精品 | 日韩在线精品视频观看| 日韩欧美综合中文字幕| 国产日韩欧美国产欧美日韩| 久久精品少妇内射毛片| 一区二区三区日本高清| 国语对白刺激高潮在线视频| 国产又粗又深又猛又爽又黄| 国产日产欧美精品视频| 亚洲av日韩av高潮无打码| 91久久国产福利自产拍 | 国产传媒中文字幕东京热| 99秋霞在线观看视频| 一本久道久久综合中文字幕| 亚洲黄香蕉视频免费看| 亚洲最大的中文字幕在线视频 | 久久精品国产亚洲av麻豆尤物| 久久精品国产亚洲av麻豆| 国产女优视频一区二区| 麻豆印象传媒在线观看| 我的性感妹妹在线观看| 日本午夜福利视频免费观看| 特黄大片性高水多欧美一级| 国产精品福利精品福利| 人人爽夜夜爽夜夜爽精品视频| 99精品人妻少妇一区二区人人妻 | 激情五月综五月综合网| 激情图日韩精品中文字幕| 国产肥女老熟女激情视频一区| 欧美午夜一区二区福利视频| 又黄又硬又爽又色的视频| 伊人久久五月天综合网| 91日韩欧美中文字幕|