APP開(kāi)發(fā)對(duì)于聊天功能的實(shí)現(xiàn)架構(gòu)是怎樣的?
深圳A(yíng)PP開(kāi)發(fā)公司結(jié)合多年的項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)整理出如下幾個(gè)重點(diǎn):聊天功能是由三個(gè)部分組成,首先我們看看聊天類(lèi)型APP開(kāi)發(fā)后臺(tái)架構(gòu)流程圖如圖9-13所示。
·連接層:集群包含數(shù)量眾多的連接服務(wù)器。
·業(yè)務(wù)層:處理具體業(yè)務(wù)信息。
·持久層:提供數(shù)據(jù)存取服務(wù)。
1.APP聊天功能開(kāi)發(fā)之連接層
連接層的作用是保持App與服務(wù)器之間的連接,連接層只負(fù)責(zé)如下兩個(gè)功能。
·與App保持連接。
·把消息通過(guò)隊(duì)列轉(zhuǎn)發(fā)到邏輯層處理
連接層的服務(wù)器很少需要重啟,一旦重啟的話(huà)會(huì)造成大量的App斷線(xiàn)并在短時(shí)間內(nèi)重連服務(wù)器,服務(wù)器瞬間涌入的大量連接請(qǐng)求引發(fā)了類(lèi)似DDOS攻擊的現(xiàn)象。這個(gè)現(xiàn)象可以通過(guò)合理的機(jī)制杜絕:當(dāng)連接層的服務(wù)器準(zhǔn)備重啟,發(fā)送條消息到連接著這臺(tái)服務(wù)器的App,讓其在重連時(shí)連接別的服務(wù)器,不要連接當(dāng)前的服務(wù)器。
連接層有個(gè)常見(jiàn)的問(wèn)題:連接層是由多臺(tái)服務(wù)器組成的集群,那么某個(gè)App要連接哪臺(tái)服務(wù)器?解決方案是動(dòng)態(tài)分配接入點(diǎn),這個(gè)方案如下。
App訪(fǎng)問(wèn)接入點(diǎn)服務(wù)器,接入點(diǎn)服務(wù)器根據(jù)各個(gè)連接服務(wù)器的負(fù)載等因素綜合計(jì)算,返回一個(gè)連接服務(wù)器的IP給App,App通過(guò)這個(gè)IP連
上連接服務(wù)器,整個(gè)流程如圖9-14所示。
APP聊天功能開(kāi)發(fā)經(jīng)驗(yàn)示意圖圖9-14動(dòng)態(tài)分配接入點(diǎn)
如果因?yàn)镈NS故障等原因無(wú)法通過(guò)接入點(diǎn)服務(wù)器獲取IP,可以使用預(yù)埋IP的方案:在A(yíng)pp中有個(gè)默認(rèn)的連接服務(wù)器IP,當(dāng)App由于DNS問(wèn)題等原因無(wú)法通過(guò)接入點(diǎn)服務(wù)器獲取IP就連接默認(rèn)的IP,流程如圖9-15所示。
2.APP開(kāi)發(fā)聊天功能方法之業(yè)務(wù)層
業(yè)務(wù)層主要是處理各種業(yè)務(wù)邏輯,業(yè)務(wù)層由下面4個(gè)模塊組成
·驗(yàn)證模塊:驗(yàn)證用戶(hù)的身份信息。
·路由模塊:連接服務(wù)器的集群包含了數(shù)量眾多的連接服務(wù)器,例如當(dāng)A用戶(hù)向B用戶(hù)發(fā)送消息,兩個(gè)用戶(hù)的連接不定是在同個(gè)服務(wù)器,因此需要通過(guò)路由模塊獲取用戶(hù)所在的服務(wù)器。如果要實(shí)現(xiàn)群聊功能,還要在這個(gè)模塊中查找“訂閱/發(fā)布”關(guān)系。
·統(tǒng)計(jì)模塊:統(tǒng)計(jì)各種信息,例如總連接數(shù)、每秒發(fā)送消息數(shù)、總用戶(hù)數(shù)、Android客戶(hù)端連接數(shù)、iOS客戶(hù)端連接數(shù)等等。
·數(shù)據(jù)存儲(chǔ)模塊:存儲(chǔ)消息,統(tǒng)計(jì)信息,用戶(hù)身份信息等。
連接層通過(guò)隊(duì)列向業(yè)務(wù)層進(jìn)行消息傳遞,業(yè)務(wù)層不斷從隊(duì)列中取出消息進(jìn)行相關(guān)的處理,如圖9-16所示。
APP聊天功能開(kāi)發(fā)方案示意圖9-16連接層與業(yè)務(wù)層通適隊(duì)列傳遞消
使用了隊(duì)列后,業(yè)務(wù)層重啟程序時(shí)對(duì)用戶(hù)的影響可以減到最少,因?yàn)樗幚淼南⒉勘4嬖陉?duì)列,重啟不會(huì)造成消息丟失。
3.APP開(kāi)發(fā)聊天功能解決方案之持久層
該層提供數(shù)據(jù)存取服務(wù),數(shù)據(jù)包含用戶(hù)的身份信息、消息、統(tǒng)計(jì)信息等。根據(jù)不同數(shù)據(jù)對(duì)存取速度不同的要求,可使用不同的軟件存儲(chǔ)不同的業(yè)務(wù)數(shù)據(jù)。例如,用戶(hù)身份信息這種高1頻讀寫(xiě)的數(shù)據(jù),可存儲(chǔ)在Redis、Memcached等內(nèi)存數(shù)據(jù)庫(kù)中。
APP開(kāi)發(fā)公司總結(jié):APP聊天功能的工作流程
下面以用戶(hù)l向用戶(hù)2發(fā)送消息“你好”為例,說(shuō)明聊天App后臺(tái)的工作流程。
(1)用戶(hù)l同連接服務(wù)器l發(fā)送消息(里面包含了接收的對(duì)象用戶(hù)2的唯標(biāo)識(shí)和內(nèi)容“你好”)
(2)連接服務(wù)器l接收到該消息后同用戶(hù)l返回一個(gè)應(yīng)答,同時(shí)通過(guò)隊(duì)列把消息傳遞到業(yè)務(wù)層
(3)業(yè)務(wù)層的驗(yàn)證模塊先驗(yàn)證該用戶(hù)的身份信息,驗(yàn)證完成后通過(guò)路由模塊確定用戶(hù)2所在的服務(wù)器為連接服務(wù)器2,把消息傳遞到連接服務(wù)器2從而發(fā)送到用戶(hù)2的手機(jī)上。
(4)業(yè)務(wù)層把消息傳遞給用戶(hù)2時(shí),對(duì)相關(guān)的消息進(jìn)行統(tǒng)計(jì),同時(shí)通過(guò)數(shù)據(jù)存儲(chǔ)模塊把數(shù)據(jù)持久化。
聊天App后臺(tái)的工作流程如圖9-17所示。
好了,APP開(kāi)發(fā)公司關(guān)于聊天功能開(kāi)發(fā)解決流程以及方法本文就分享到這里。謝謝您的關(guān)注。博納網(wǎng)絡(luò)編輯整理。