即時通訊系統架構

2021-09-30 10:24:32 字數 1282 閱讀 8597

先看狀態訊息系統

connd  

client接入伺服器,可以支援udp,也可以支援tcp,一般建議優先選擇tcp。connd可以布置多台,client接入時,可以用簡單的dns輪詢的方式實現負載均衡。connd功能是維護連線和**訊息包。

pconnd

proxy connd, **接入伺服器,是connd的擴充套件,除了有connd的功能外,支援伺服器的接入,比如web server。

msgd

訊息處理伺服器,主要功能是使用者狀態管理,訊息**(包括合理性驗證)以及離線訊息儲存。

說乙個使用者登入成功後,對所有好友的狀態通知過程。我設計的系統中,把使用者狀態也簡單看成類似文字聊天訊息。下面使用者u的上線過程,他有好友f1, f2。

(1) connd收到u上線訊息,將訊息發給u所在的msgd。

(2) msgd獲取u的好友,f1, f2;如果f1, f2和u不在同乙個msgd上,msgd將訊息通過connd轉給f1, f2所在的msgd。

(3) 最終的msgd把上線通知通過connd發給f1, f2。

msgd的u是通過什麼方式獲取最新的好友呢? 這個問題我要著重描述一下。

使用者的好友資料都在另外乙個子系統中:好友子系統。 msgd通過tcp的方式(為什麼用tcp呢?)主動從好友系統獲取。同時,msgd也快取乙份好友資料。msgd獲取使用者好友時,如果cache是最新的,直接從cache取,否則要從好友子系統那邊取。現在重點問題出來了,如何確定使用者的好友是最新的?這類問題我們要根據不同的業務不同的特點靈活採用不同的方法。請看一種高效的處理方式:

(1) 好友子系統為每個使用者的好友算個hash值(可以用md5)。

(2) client獲取好友時,同時也拿到這個hash值;發和好友相關的訊息時,把hash值帶給msgd。

(3) msgd第一次從好友子系統獲取某個使用者好友時,也獲取這個hash值;像要**狀態訊息,獲取好友時,把client帶過來的hash1和自身的hash2比較一下。。。

像im這種業務特點是,對好友資料的寫很少,讀很多,相對於讀的消耗,寫基本可以忽略的。用上面的方法,基本上每次兩者的hash值是相等的,直接從cache拿好友資料。這種處理方法也可以引入到其他應用業務中。建議不要每次都粗暴地跨程序獲取類似好友資料。

好了,上面是對im系統狀態訊息子系統的簡單介紹。

另外,像好友子系統就很簡潔,啟幾個tcp接入server,根據不同使用者,去不同的好友邏輯伺服器上取好友。好友邏輯伺服器,可以考慮採用lru淘汰演算法(發現老用這種演算法)。如果你很有錢,也可以對好友資料做全cache,不用淘汰。

p2p系統和網上介紹的架構都差不多,大家搜一把吧。

即時通訊系統

企業擁有一套理想的即時通訊系統,正如找到了一位得心應手的商務秘書。然而,縱觀當前企業即時通訊市場,同質化的即時通訊軟體比比皆是,而能夠讓企業真正根據自身需要來按需定製 人性化開發的即時通訊系統卻少之又少。傳統開發理念讓企業被動使用即時通訊。目前,大多數的軟體提供商還在用傳統的開發理念來開發企業即時通...

即時通訊系統IM

背景 即時通訊 instant messaging 是目前internet上最為流行的通訊方式,各種各樣的即時通訊軟體也層出不窮 服務提供商也提供了越來越豐富的通訊服務功能。不容置疑,internet已經成為真正的資訊高速公路。從實際工程應用角度出發,以計算機網路原理為指導,結合當前網路中的一些常用...

mysql 即時通訊 即時通訊IM模板

更新記錄 1.0.3 2020 10 22 完成點對點通訊功能,修復若 ug。1.0.2 2020 06 02 1 增加登入 註冊 個人資訊頁面 speedy im 注意介紹 正在持續開發中,目前僅部分ui開發完成。demo im.apk 已有基礎ui以及登陸 點到點聊天等功能。開發客戶端測試賬號密...