直播聊天室大并發(fā)消息處理

? ? ? ?最近在做直播間的聊天室,踩了很多坑,我們采用的是融云的IM,實(shí)現(xiàn)聊天室的功能,所有的直播間功能都通過消息進(jìn)行傳遞,如,禮物、紅包、連麥、踢人、彈幕、禁言、管理...等等。對(duì)于這些消息的處理就出現(xiàn)了一些問題,下面我將介紹我踩坑的過程和解決的過程。

一、采用融云的消息處理

? ? ? ? 融云其實(shí)對(duì)大并發(fā)消息做了一些處理,在接收消息的地方融云返回了一個(gè)nleft表示剩余消息條數(shù),他們建議當(dāng)nleft 等于0的時(shí)候我們?cè)谌ニ⑿耈I,這樣可以避免過多消息處理導(dǎo)致主線程阻塞,內(nèi)存升高,最終有可能導(dǎo)致APP閃退。我采用的他們的處理方式,但是我的消息不只是普通的文字聊天消息可以在等消息接收完去刷新tableView,我還有禮物播放的消息,連麥消息,它們的優(yōu)先級(jí)都很高需要實(shí)時(shí)進(jìn)行刷新,按照剛才的處理方法就有問題,并且還會(huì)出現(xiàn)消息丟失的問題,如禮物連續(xù)發(fā)送的時(shí)候消息并發(fā)量大,就會(huì)導(dǎo)致發(fā)送方和接受方禮物的個(gè)數(shù)不一致,內(nèi)存過大。

二、定時(shí)取消息并刷新視圖

? ? ? ? 由于上面的情況,后面查閱了很多資料想出了一種方法就是定時(shí)取消息并處理刷新,這種方法就是創(chuàng)建一個(gè)消息的緩存池,將接收來的所有消息先存放到緩存池中,然后定時(shí)0.5秒或者1秒去緩存中拿一條消息去處理并刷新UI,后來測(cè)試發(fā)現(xiàn)高并發(fā)下內(nèi)存增長不是太高,整體比較流暢,而且也解決了高并發(fā)消息丟失的問題,但是這種處理又引發(fā)了另一個(gè)問題就是我們的緩存池相當(dāng)于一個(gè)隊(duì)列,遵守先進(jìn)先出的原則,所有接收的消息都需要排隊(duì)去處理,這就造成有些即時(shí)性比較高的消息需要等待前面的消息處理完才能處理當(dāng)前的消息,造成消息延遲過大。

三、按優(yōu)先級(jí)緩存消息,定時(shí)去取

? ? ? ? ?基于上述情況 ,我對(duì)所有的消息的優(yōu)先級(jí)進(jìn)行分類,先按即時(shí)性分,再按消息量分,對(duì)所有的消息我分了五個(gè)等級(jí)。

1.連麥、關(guān)注、踢人、禁言消息量少即時(shí)性高放到優(yōu)先級(jí)一級(jí);

2.紅包、進(jìn)場(chǎng)、退場(chǎng)消息量比較大即時(shí)性也高放到第二等級(jí);

3.小禮物消息量大消息即時(shí)性要求不是很大放到第三等級(jí);

4.普通文本消息量特別大即時(shí)性不是很高放到第四等級(jí);

5.彈幕,公告,系統(tǒng)消息消息量不是很大即時(shí)性也不是很高第五等級(jí);

? ? ? ? 對(duì)于這五個(gè)等級(jí)消息去取,我采用一秒鐘取消息的次數(shù)劃分等級(jí),而且每個(gè)時(shí)刻只取某一個(gè)緩存池的一條消息,優(yōu)先級(jí)一一秒鐘取9~11次,優(yōu)先級(jí)二取6~8次,優(yōu)先級(jí)三取4~5次,優(yōu)先級(jí)四取2~3次,優(yōu)先級(jí)五取1次,通過這種處理解決了上述消息的即時(shí)性的問題,實(shí)際測(cè)試中也看到了效果,高并發(fā)也不會(huì)造成內(nèi)存增高,消息丟失的問題。

四、總結(jié)? ? ?

? ? ? ? 通過這次的消息處理,降低了CPU的處理,優(yōu)化了系統(tǒng)性能,提高了用戶體驗(yàn)問題,但是這只是初步的處理,其實(shí)還有很多優(yōu)化的地方,比如定時(shí)取每個(gè)等級(jí)消息的時(shí)間,我們后期可以做成動(dòng)態(tài)的,根據(jù)當(dāng)前房間人數(shù)可以動(dòng)態(tài)調(diào)整時(shí)間,人數(shù)越多,時(shí)間可以適當(dāng)變短或者其他方式,消息的處理還可以采用多線程處理,并行執(zhí)行,提高執(zhí)行效率,等等這些優(yōu)化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,046評(píng)論 4 61
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 詩人佛洛斯特說,金色的樹林里有兩條岔路。旅人在分岔口前選了其中一條,日后惦記的,卻是當(dāng)時(shí)的未竟之路。如果,你的人生...
    童書游戲力閱讀 1,249評(píng)論 0 1
  • 蘋果綠的顏色圓圓的點(diǎn) 沒量尺寸但有邊 做了一件小睡裙 舒舒服服穿在身(?′`?)*??*
    時(shí)間是一劑良藥閱讀 118評(píng)論 0 0

友情鏈接更多精彩內(nèi)容