新聞中心
隨著互聯(lián)網(wǎng)的快速發(fā)展,即時(shí)通訊應(yīng)用在我們的日常生活中愈發(fā)普及。 WhatsApp、微信、Telegram 等即時(shí)通訊應(yīng)用已經(jīng)成為人們生活中不可或缺的一部分。而這些平臺(tái)之所以能夠成為用戶的首選,離不開(kāi)高效穩(wěn)定的后臺(tái)技術(shù)支持。因此,在搭建即時(shí)通訊平臺(tái)時(shí),如何設(shè)計(jì)高效穩(wěn)定的數(shù)據(jù)庫(kù)成為非常重要的問(wèn)題。本文將從 IM 大數(shù)據(jù)庫(kù)的設(shè)計(jì)入手,探討構(gòu)建高效穩(wěn)定的即時(shí)通訊平臺(tái)的方法。

一、IM 大數(shù)據(jù)庫(kù)的設(shè)計(jì)
1. 數(shù)據(jù)庫(kù)的類型
MySQL 是一個(gè)開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它被廣泛地應(yīng)用在 Web 應(yīng)用開(kāi)發(fā)中。在 IM 大數(shù)據(jù)庫(kù)的選型中,選擇 MySQL 是比較合適的。因?yàn)?MySQL 的優(yōu)勢(shì)在于它是輕量級(jí)的、易于使用的、可擴(kuò)展的,并且被廣泛支持。
2. 數(shù)據(jù)庫(kù)的架構(gòu)
IM 大數(shù)據(jù)庫(kù)的架構(gòu)應(yīng)該分為兩個(gè)分層。之一層是主數(shù)據(jù)庫(kù),它存放著所有的數(shù)據(jù)。第二層是讀寫分離服務(wù)器,它負(fù)責(zé)將主數(shù)據(jù)庫(kù)的數(shù)據(jù)分發(fā)到各個(gè)讀服務(wù)器中。
3. 數(shù)據(jù)庫(kù)的表
IM 大數(shù)據(jù)庫(kù)的表設(shè)計(jì)應(yīng)該盡量遵循以下原則:將需要關(guān)聯(lián)的字段存放在同一張表中,避免null值的產(chǎn)生,將經(jīng)常使用的字段創(chuàng)建索引。對(duì)于 MySQL 數(shù)據(jù)庫(kù)而言,適當(dāng)?shù)厥褂?InnoDB 引擎和 MyISAM 引擎是可以提升性能的。對(duì)于關(guān)系表中要經(jīng)常進(jìn)行的查、改操作應(yīng)該采用 InnoDB 引擎,對(duì)于讀取比較多而寫入比較少的表,應(yīng)該采用 MyISAM 引擎。
4. 數(shù)據(jù)庫(kù)的存儲(chǔ)
IM 大數(shù)據(jù)庫(kù)的存儲(chǔ)能夠直接關(guān)系到系統(tǒng)的性能和穩(wěn)定性。在存儲(chǔ)方面,Redis 是一款非常聚合的存儲(chǔ)系統(tǒng),它是一款基于內(nèi)存超高性能的鍵值對(duì)存儲(chǔ)系統(tǒng)。在 IM 大數(shù)據(jù)庫(kù)的存儲(chǔ)方案上,可以考慮使用 Redis 作為緩存服務(wù)器,將 Redis 和 MySQL 一起使用并相互協(xié)作,提高整個(gè)系統(tǒng)的性能。
二、構(gòu)建高效穩(wěn)定的即時(shí)通訊平臺(tái)
1. 消息服務(wù)
消息服務(wù)是即時(shí)通訊平臺(tái)中非常重要的一部分,它需要實(shí)時(shí)高效地傳輸信息。在構(gòu)建消息服務(wù)時(shí),需要考慮到消息的格式、編碼和解碼方式。同時(shí),消息服務(wù)需要考慮到服務(wù)器的集群部署和高可用性,避免任何一個(gè)節(jié)點(diǎn)出現(xiàn)故障導(dǎo)致整個(gè)系統(tǒng)崩潰。
2. 負(fù)載均衡
在構(gòu)建即時(shí)通訊平臺(tái)時(shí),需要考慮到負(fù)載均衡來(lái)避免系統(tǒng)瓶頸。因此,在服務(wù)器的架構(gòu)中應(yīng)該考慮使用負(fù)載均衡器來(lái)分配不同的請(qǐng)求到不同的服務(wù)器上,從而達(dá)到平衡服務(wù)器負(fù)載的目的。
3. 安全性
安全性是構(gòu)建即時(shí)通訊平臺(tái)過(guò)程中需要重點(diǎn)考慮的問(wèn)題。在設(shè)計(jì)時(shí),需要考慮賬戶登錄的安全問(wèn)題、消息傳輸?shù)陌踩珕?wèn)題和數(shù)據(jù)存儲(chǔ)的安全問(wèn)題。具體實(shí)現(xiàn)方面可以采用 SSL/TLS 加密算法、密碼哈希算法等技術(shù)加強(qiáng)平臺(tái)的安全性。
4. 可擴(kuò)展性
在構(gòu)建即時(shí)通訊平臺(tái)時(shí),我們需要考慮到平臺(tái)的未來(lái)發(fā)展。因此,在設(shè)計(jì)方案時(shí)應(yīng)該考慮可擴(kuò)展性。即時(shí)通訊平臺(tái)應(yīng)該有不同的模塊,可以動(dòng)態(tài)擴(kuò)展或者去除這些模塊。
5. 數(shù)據(jù)備份和恢復(fù)
對(duì)于任何一個(gè)系統(tǒng)而言,數(shù)據(jù)都是非常重要的。在構(gòu)建即時(shí)通訊平臺(tái)時(shí),數(shù)據(jù)備份和恢復(fù)應(yīng)該是必備的。數(shù)據(jù)備份和恢復(fù)可以采用備份數(shù)據(jù)庫(kù)、定期備份相關(guān)關(guān)鍵數(shù)據(jù)等方式來(lái)保障數(shù)據(jù)的安全。
三、
在設(shè)計(jì)和構(gòu)建 IM 大數(shù)據(jù)庫(kù)時(shí)應(yīng)該遵循以下原則:選擇合適的數(shù)據(jù)庫(kù)類型、設(shè)計(jì)合理的數(shù)據(jù)庫(kù)架構(gòu)和表結(jié)構(gòu)、采用合適的存儲(chǔ)方式、保障消息服務(wù)的高效可靠性、使用負(fù)載均衡器平衡服務(wù)器負(fù)載、加強(qiáng)平臺(tái)的安全性、保證平臺(tái)的可擴(kuò)展性和備份數(shù)據(jù)以確保數(shù)據(jù)的安全。在遵循這些原則的同時(shí),我們可以構(gòu)建出高效穩(wěn)定的即時(shí)通訊平臺(tái)。
相關(guān)問(wèn)題拓展閱讀:
- 如何設(shè)計(jì)數(shù)據(jù)庫(kù)?
- 教你設(shè)計(jì)大型Oracle數(shù)據(jù)庫(kù)
- 為自己搭建一個(gè)分布式 IM(即時(shí)通訊) 系統(tǒng)
如何設(shè)計(jì)數(shù)據(jù)庫(kù)?
系統(tǒng)磨做架構(gòu)師:數(shù)據(jù)庫(kù)系統(tǒng)瞎橋衡之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)方法、基本步消叢驟和需求分析
方法/步驟
常見(jiàn)數(shù)據(jù)庫(kù)設(shè)計(jì)
請(qǐng)點(diǎn)擊輸入圖片描述
一主多從
冗余讀庫(kù)帶來(lái)的副作用:讀寫有延時(shí),可能不一致;寫仍然是單點(diǎn)隱判,不能保證寫高可用。
請(qǐng)拆攜明點(diǎn)擊輸入圖片描述
主庫(kù)冗余
存在數(shù)據(jù)不一致問(wèn)題
請(qǐng)點(diǎn)擊輸入圖旅告片描述
數(shù)據(jù)讀取速度
請(qǐng)點(diǎn)擊輸入圖片描述
利用緩存來(lái)實(shí)現(xiàn)
請(qǐng)點(diǎn)擊輸入圖片描述
常見(jiàn)緩存設(shè)計(jì)如下
請(qǐng)點(diǎn)擊輸入圖片描述
教你設(shè)計(jì)大型Oracle數(shù)據(jù)庫(kù)
本文教你如何設(shè)計(jì)大型Oracle數(shù)據(jù)庫(kù) 希望對(duì)大家有所幫助
一 概論
超大型系統(tǒng)的特點(diǎn)為
處理的用戶數(shù)一般都超過(guò)百萬(wàn) 有的還超過(guò)千萬(wàn) 數(shù)據(jù)庫(kù)的數(shù)據(jù)量一般超過(guò) TB;
系統(tǒng)必須提供實(shí)時(shí)響應(yīng)功能 系統(tǒng)需不停機(jī)運(yùn)行 要求系統(tǒng)有很高的可用性及可擴(kuò)展性
為了能達(dá)到以上要求 除了需要性能優(yōu)越的計(jì)算機(jī)和海量存儲(chǔ)設(shè)備外 還需要先進(jìn)的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)和優(yōu)化的應(yīng)用系統(tǒng)
一般的超大型系統(tǒng)采用雙機(jī)或多機(jī)集群系統(tǒng) 下面以數(shù)據(jù)庫(kù)采用Oracle 并行服務(wù)器為例來(lái)談?wù)劤笮蛿?shù)據(jù)庫(kù)設(shè)計(jì)方法
確定系統(tǒng)的ORACLE并行服務(wù)器應(yīng)用劃分策略迅盯
數(shù)據(jù)庫(kù)物理結(jié)構(gòu)的設(shè)計(jì)
系統(tǒng)硬盤的劃分及分配
備份及恢復(fù)策略的考慮
二 Oracle并行服務(wù)器應(yīng)用劃分策略
Oracle并行服務(wù)器允許不同節(jié)點(diǎn)上的多個(gè)INSTANCE實(shí)例同時(shí)訪問(wèn)一個(gè)數(shù)據(jù)庫(kù) 以提高系統(tǒng)的可用性 可擴(kuò)展性及性能 Oracle并行服務(wù)器中的每個(gè)INSTANCE實(shí)例都可將共享數(shù)據(jù)庫(kù)中的表或索引的數(shù)據(jù)塊讀入本地的緩沖區(qū)中 這就意味著一個(gè)數(shù)據(jù)塊可存在于多個(gè)INSTANCE實(shí)例的SGA區(qū)中 那么保持這些緩沖區(qū)的數(shù)據(jù)的一致性就很嘩亮重要 Oracle使用 PCM( Parallel Cache Management)鎖維護(hù)緩沖區(qū)的一致性 Oracle同時(shí)通過(guò)I DLM(集成的分布式鎖管理器)實(shí)現(xiàn)PCM 鎖 并通過(guò)專門的LCK進(jìn)程實(shí)現(xiàn)INSTANCE實(shí)例間的數(shù)據(jù)一致
考慮這種情況 INSTANCE 對(duì)BLOCK X塊修改 這時(shí)INSTANCE 對(duì)BLOCK X塊也需要修改 Oracle并行服務(wù)器利用PCM鎖機(jī)制 使BLOCK X從INSTANCE 的SGA區(qū)寫入數(shù)據(jù)庫(kù)數(shù)據(jù)文件中 又從數(shù)據(jù)文件中把BLOCK X塊讀入INSTANCE 的SGA區(qū)中 發(fā)生這種情況即為一個(gè)PING PING使原來(lái) 個(gè)MEMORY IO可以完成的工作變成 個(gè)DISK IO和 個(gè) MEMORY IO才能夠完成 如果系統(tǒng)中有過(guò)多的PING 將大大降低系統(tǒng)的性能
Oracle并行服務(wù)器中的每個(gè)PCM鎖可管理多個(gè)數(shù)據(jù)塊 PCM鎖管理的數(shù)據(jù)塊的個(gè)數(shù)與分配給一個(gè)數(shù)據(jù)文件的PCM鎖的個(gè)數(shù)及該數(shù)據(jù)文件的大小有關(guān) 當(dāng)INSTANCE 和INSTANCE 要操作不同的BLOCK 如果這些BLOCK 是由同一個(gè)PCM鎖管理的 仍然會(huì)發(fā)生PING 這些PING稱為FALSE PING 當(dāng)多個(gè)INSTANCE訪問(wèn)相同的BLOCK而產(chǎn)生的PING是TRUE PING
合理的應(yīng)用劃分使不同的應(yīng)用訪問(wèn)不同的數(shù)據(jù) 可避免或減少TRUE PING;通過(guò)給FALSE PING較多的數(shù)據(jù)文件分配更多的PCM鎖可減少 FALSE PING的次數(shù) 增加PCM鎖不能減少TRUE PING
所以 Oracle并行服務(wù)器設(shè)計(jì)的目的是使系統(tǒng)交易處理合理的分布在INSTANCE實(shí)例間 以最小化PING 同時(shí)合理的分配PCM鎖 減少FALSE PING 設(shè)計(jì)的關(guān)鍵是找出可能產(chǎn)生的沖突 從而決定應(yīng)用劃分的策略 應(yīng)用劃分有如下四種方法
根據(jù)功能模塊劃分 不同的節(jié)點(diǎn)運(yùn)行不同的應(yīng)用
根據(jù)用戶劃分 不同類型的用戶運(yùn)行在不同的節(jié)點(diǎn)上
根據(jù)數(shù)據(jù)劃分 不同的節(jié)點(diǎn)訪問(wèn)不同的數(shù)據(jù)或索引
根據(jù)時(shí)間劃分 不同的應(yīng)用在不同的時(shí)間段運(yùn)行
應(yīng)用劃分的兩個(gè)重要原則是使PING最小化及使各節(jié)點(diǎn)的負(fù)載大致均衡
三 數(shù)據(jù)庫(kù)物理結(jié)構(gòu)的設(shè)計(jì)
數(shù)據(jù)庫(kù)物理結(jié)構(gòu)設(shè)計(jì)包括確定表及索引的物理存儲(chǔ)參數(shù) 確定及分配數(shù)據(jù)畝蘆和庫(kù)表空間 確定初始的回滾段 臨時(shí)表空間 redo log files等 并確定主要的初始化參數(shù) 物理設(shè)計(jì)的目的是提高系統(tǒng)的性能 整個(gè)物理設(shè)計(jì)的參數(shù)可以根據(jù)實(shí)際運(yùn)行情況作調(diào)整
表及索引數(shù)據(jù)量估算及物理存儲(chǔ)參數(shù)的設(shè)置
lishixinzhi/Article/program/Oracle/202311/18944
為自己搭建一個(gè)分布式 IM(即時(shí)通訊) 系統(tǒng)
CIM(CROSS-IM) 一款面向開(kāi)發(fā)者的 IM(即時(shí)通訊)系統(tǒng);同時(shí)提供了一些組件幫助開(kāi)發(fā)者構(gòu)建一款屬于自己可水平擴(kuò)展的 IM 。
借助 CIM 你可以實(shí)現(xiàn)以下需求:
下面來(lái)看看具體的架構(gòu)設(shè)計(jì)。
整體主要由以下模塊組成:
cim-server
IM 服務(wù)端;用于接收 client 連接、消息透?jìng)?、消息推送等功能?/p>
支持集群部署。
cim-forward-route
消息路由服務(wù)器;用于處理消息路由、消息轉(zhuǎn)發(fā)、用戶登錄、用戶下線以及一些運(yùn)營(yíng)工具(獲取在線用戶數(shù)等)。
cim-client
IM 客戶端;給用戶使用的消息終端,一個(gè)命令即可啟動(dòng)并向其他人發(fā)起通訊(群聊、私聊);同時(shí)內(nèi)置了一些常用命令方便使用。
整體的流程也比較簡(jiǎn)單,流程圖如下:
所以當(dāng)我們自己部署時(shí)需要以下步驟:
接下來(lái)重點(diǎn)看看具體的實(shí)現(xiàn),比如群聊、私聊消息如何流轉(zhuǎn);IM 服務(wù)端負(fù)載均衡;服務(wù)如何注冊(cè)發(fā)現(xiàn)等等。
IM 服務(wù)端
先來(lái)看看服務(wù)端;主要是實(shí)現(xiàn)客戶端上下線、消息下發(fā)等功能。
首先是服務(wù)啟動(dòng):
由于是在 SpringBoot 中搭建的,所以在應(yīng)用啟動(dòng)時(shí)需要啟動(dòng) Netty 服務(wù)。
從 pipline 中可以看出使用了 Protobuf 的編解碼(具體報(bào)文在客戶端中分析)。
注冊(cè)發(fā)現(xiàn)
需要滿足 IM 服務(wù)端的水平擴(kuò)展需求,所以 cim-server 是需要將自身數(shù)據(jù)發(fā)布到注冊(cè)中心的。
所以在應(yīng)用啟動(dòng)成功后需要將自身數(shù)據(jù)注冊(cè)到 Zookeeper 中。
最主要的目的就是將當(dāng)前應(yīng)用的 ip + cim-server-port+ http-port 注冊(cè)上去。
上圖是我在演示環(huán)境中注冊(cè)的兩個(gè) cim-server 實(shí)例(由于在一臺(tái)服務(wù)器,所以只是端口不同)。
這樣在客戶端(監(jiān)聽(tīng)這個(gè) Zookeeper 節(jié)點(diǎn))就能實(shí)時(shí)的知道目前可用的服務(wù)信息。
登錄
當(dāng)客戶端請(qǐng)求 cim-forward-route 中的登錄接口(詳見(jiàn)下文)做完業(yè)務(wù)驗(yàn)證(就相當(dāng)于日常登錄其他網(wǎng)站一樣)之后,客戶端會(huì)向服務(wù)端發(fā)起一個(gè)長(zhǎng)連接,如之前的流程所示:
這時(shí)客戶端會(huì)發(fā)送一個(gè)特殊報(bào)文,表明當(dāng)前是登錄信息。
服務(wù)端收到后就需要將該客戶端的 userID 和當(dāng)前 Channel 通道凳正告關(guān)系保存起來(lái)。
同時(shí)也緩存了用戶的信息,也就是 userID 和 用戶名。
離線
當(dāng)客戶端斷線后也需要將剛才緩存的信息清除掉。
同時(shí)也需要調(diào)用 route 接口清除相關(guān)信息(具體接口看下文)。
IM 路由
從架構(gòu)圖中可以看棗明出,路由層是非常重要的一環(huán);它提供了一系列的 HTTP 服務(wù)承接了客戶端和服務(wù)端。
目前主要是以下幾個(gè)接口。
注冊(cè)接口
由于每一個(gè)客戶端都是需要登錄才能使用的,所以清枝之一步自然是注冊(cè)。
這里就設(shè)計(jì)的比較簡(jiǎn)單,直接利用 Redis 來(lái)存儲(chǔ)用戶信息;用戶信息也只有 ID 和 userName 而已。
只是為了方便查詢?cè)?Redis 中的 KV 又反過(guò)來(lái)存儲(chǔ)了一份 VK,這樣 ID 和 userName 都必須唯一。
登錄接口
這里的登錄和 cim-server 中的登錄不一樣,具有業(yè)務(wù)性質(zhì),
為了實(shí)現(xiàn)只能一個(gè)用戶登錄,使用了 Redis 中的 set 來(lái)保存登錄信息;利用 userID 作為 key ,重復(fù)的登錄就會(huì)寫入失敗。
獲取一臺(tái)可用的路由實(shí)例也比較簡(jiǎn)單:
當(dāng)然要獲取 Zookeeper 中的服務(wù)實(shí)例前自然是需要監(jiān)聽(tīng) cim-server 之前注冊(cè)上去的那個(gè)節(jié)點(diǎn)。
具體代碼如下:
也是在應(yīng)用啟動(dòng)之后監(jiān)聽(tīng) Zookeeper 中的路由節(jié)點(diǎn),一旦發(fā)生變化就會(huì)更新內(nèi)部緩存。
群聊接口
這是一個(gè)真正發(fā)消息的接口,實(shí)現(xiàn)的效果就是其中一個(gè)客戶端發(fā)消息,其余所有客戶端都能收到!
流程肯定是客戶端發(fā)送一條消息到服務(wù)端,服務(wù)端收到后在上文介紹的 SessionSocketHolder 中遍歷所有 Channel(通道)然后下發(fā)消息即可。
服務(wù)端是單機(jī)倒也可以,但現(xiàn)在是集群設(shè)計(jì)。所以所有的客戶端會(huì)根據(jù)之前的輪詢算法分配到不同的 cim-server 實(shí)例中。
因此就需要路由層來(lái)發(fā)揮作用了。
路由接口收到消息后首先遍歷出所有的客戶端和服務(wù)實(shí)例的關(guān)系。
路由關(guān)系在 Redis 中的存放如下:
由于 Redis 單線程的特質(zhì),當(dāng)數(shù)據(jù)量大時(shí);一旦使用 keys 匹配所有 cim-route:* 數(shù)據(jù),會(huì)導(dǎo)致 Redis 不能處理其他請(qǐng)求。
所以這里改為使用 scan 命令來(lái)遍歷所有的 cim-route:*。
接著會(huì)挨個(gè)調(diào)用每個(gè)客戶端所在的服務(wù)端的 HTTP 接口用于推送消息。
在 cim-server 中的實(shí)現(xiàn)如下:
cim-server 收到消息后會(huì)在內(nèi)部緩存中查詢?cè)?userID 的通道,接著只需要發(fā)消息即可。
在線用戶接口
這是一個(gè)輔助接口,可以查詢出當(dāng)前在線用戶信息。
實(shí)現(xiàn)也很簡(jiǎn)單,也就是查詢之前保存 ”用戶登錄狀態(tài)的那個(gè)去重 set “即可。
私聊接口
之所以說(shuō)獲取在線用戶是一個(gè)輔助接口,其實(shí)就是用于輔助私聊使用的。
一般我們使用私聊的前提肯定得知道當(dāng)前哪些用戶在線,接著你才會(huì)知道你要和誰(shuí)進(jìn)行私聊。
類似于這樣:
在我們這個(gè)場(chǎng)景中,私聊的前提就是需要獲得在線用戶的 userID。
所以私聊接口在收到消息后需要查詢到接收者所在的 cim-server 實(shí)例信息,后續(xù)的步驟就和群聊一致了。調(diào)用接收者所在實(shí)例的 HTTP 接口下發(fā)信息。
只是群聊是遍歷所有的在線用戶,私聊只發(fā)送一個(gè)的區(qū)別。
下線接口
一旦客戶端下線,我們就需要將之前存放在 Redis 中的一些信息刪除掉(路由信息、登錄狀態(tài))。
IM 客戶端
客戶端中的一些邏輯其實(shí)在上文已經(jīng)談到一些了。
登錄
之一步也就是登錄,需要在啟動(dòng)時(shí)調(diào)用 route 的登錄接口,獲得 cim-server 信息再創(chuàng)建連接。
登錄過(guò)程中 route 接口會(huì)判斷是否為重復(fù)登錄,重復(fù)登錄則會(huì)直接退出程序。
接下來(lái)是利用 route 接口返回的 cim-server 實(shí)例信息(ip+port)創(chuàng)建連接。
最后一步就是發(fā)送一個(gè)登錄標(biāo)志的信息到服務(wù)端,讓它保持客戶端和 Channel 的關(guān)系。
自定義協(xié)議
上文提到的一些登錄報(bào)文、真正的消息報(bào)文這些其實(shí)都是在我們自定義協(xié)議中可以區(qū)別出來(lái)的。
由于是使用 Google Protocol Buffer 編解碼,所以先看看原始格式。
其實(shí)這個(gè)協(xié)議中目前一共就三個(gè)字段:
目前主要是三種類型,分別對(duì)應(yīng)不同的業(yè)務(wù):
心跳
為了保持客戶端和服務(wù)端的連接,每隔一段時(shí)間沒(méi)有發(fā)送消息都需要自動(dòng)的發(fā)送心跳。
目前的策略是每隔一分鐘就是發(fā)送一個(gè)心跳包到服務(wù)端:
這樣服務(wù)端每隔一分鐘沒(méi)有收到業(yè)務(wù)消息時(shí)就會(huì)收到 ping 的心跳包:
內(nèi)置命令
客戶端也內(nèi)置了一些基本命令來(lái)方便使用。
比如輸入 :q 就會(huì)退出客戶端,同時(shí)會(huì)關(guān)閉一些系統(tǒng)資源。
當(dāng)輸入 :olu(onlineUser 的簡(jiǎn)寫)就會(huì)去調(diào)用 route 的獲取所有在線用戶接口。
群聊
群聊的使用非常簡(jiǎn)單,只需要在控制臺(tái)輸入消息回車即可。
這時(shí)會(huì)去調(diào)用 route 的群聊接口。
私聊
私聊也是同理,但前提是需要觸發(fā)關(guān)鍵字;使用 userId;;消息內(nèi)容 這樣的格式才會(huì)給某個(gè)用戶發(fā)送消息,所以一般都需要先使用 :olu 命令獲取所以在線用戶才方便使用。
消息回調(diào)
為了滿足一些定制需求,比如消息需要保存之類的。
所以在客戶端收到消息之后會(huì)回調(diào)一個(gè)接口,在這個(gè)接口中可以自定義實(shí)現(xiàn)。
因此先創(chuàng)建了一個(gè) caller 的 bean,這個(gè) bean 中包含了一個(gè) CustomMsgHandleListener 接口,需要自行處理只需要實(shí)現(xiàn)此接口即可。
自定義界面
由于我自己不怎么會(huì)寫界面,但保不準(zhǔn)有其他大牛會(huì)寫。所以客戶端中的群聊、私聊、獲取在線用戶、消息回調(diào)等業(yè)務(wù)(以及之后的業(yè)務(wù))都是以接口形式提供。
也方便后面做頁(yè)面集成,只需要調(diào)這些接口就行了;具體實(shí)現(xiàn)不用怎么關(guān)心。
cim 目前只是之一版,BUG 多,功能少(只拉了幾個(gè)群友做了測(cè)試);不過(guò)后續(xù)還會(huì)接著完善,至少這一版會(huì)給那些沒(méi)有相關(guān)經(jīng)驗(yàn)的朋友帶來(lái)一些思路。
歡迎工作一到五年的Java工程師朋友們加入Java程序員開(kāi)發(fā):
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來(lái)學(xué)習(xí)提升自己,不要再用”沒(méi)有時(shí)間“來(lái)掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來(lái)的自己一個(gè)交代!
im大數(shù)據(jù)庫(kù)設(shè)計(jì)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于im大數(shù)據(jù)庫(kù)設(shè)計(jì),IM大數(shù)據(jù)庫(kù)設(shè)計(jì) | 構(gòu)建高效穩(wěn)定的即時(shí)通訊平臺(tái),如何設(shè)計(jì)數(shù)據(jù)庫(kù)?,教你設(shè)計(jì)大型Oracle數(shù)據(jù)庫(kù),為自己搭建一個(gè)分布式 IM(即時(shí)通訊) 系統(tǒng)的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站名稱:IM大數(shù)據(jù)庫(kù)設(shè)計(jì)|構(gòu)建高效穩(wěn)定的即時(shí)通訊平臺(tái)(im大數(shù)據(jù)庫(kù)設(shè)計(jì))
當(dāng)前地址:http://m.fisionsoft.com.cn/article/cdjeoie.html


咨詢
建站咨詢
