天天看點

IM伺服器:我的千萬級即時通信伺服器叢集

一、伺服器特點

01、傻瓜式部署,一鍵式啟動;

02、單機支援10萬以上線上使用者聊天(8G記憶體,如果記憶體足夠大,并發量可超過10萬);

03、支援伺服器叢集,叢集間高内聚、低耦合,可動态橫向擴充IM伺服器,最大支援200台IM伺服器的叢集;

04、高并發、高穩定性;

05、支援群組聊天;

06、IM業務完全獨立:隻需uid(使用者id)和gid(群組id),可友善的将IM業務內建到上層業務中;

07、内置HTTP通路接口,用于查詢使用者狀态(上線/離線);

07、基于websocket協定,輕松實作網頁端開發;

09、通路安全支援;

10、伺服器體積小,不依賴任何第三方庫和中間件,伺服器叢集隻有三個檔案,不到500K;

11、提供外部接口用于處理離線消息;

12、開發成本低,基于websocket協定,消息體為json格式,使用者可擴充自己的消息字段;

二、技術特點

01、實作自主記憶體管理,避免記憶體碎片的産生;

02、采用IOCP模型,充分利用CPU多核性能,支援高并發,IO業務處理完全異步;

03、采用“無鎖”化設計,IM伺服器内部隻有一把鎖;

04、内部大量采用HASH表進行資料管理,查詢速度實作O(1);

05、采用紅黑樹進行定時器管理;

06、嚴格的網絡異常處理,防止高并發下記憶體通路異常;

三、伺服器叢集程式介紹

1、imserver.exe

概要介紹:IM通信服務

預設端口:8210

功能說明:

1、轉發使用者間的點對點消息;

2、轉發群組消息;

3、群組的建立、銷毀以及将指定使用者加入到指定群組;

如果線上使用者數量超出單台imserver的配置,則需要建立IM伺服器叢集,不同的使用者會登入在不同的IM伺服器上。 在叢集模式下,需要importal.exe和improxy.exe程式的支援。

假設一台imserver支援10萬使用者,你的上層業務需要支援百萬級線上聊天,則需要10台IM伺服器。此時這10台伺服器 的管理和通信需要如下兩個服務支援。

2、importal.exe

概要介紹:負載均衡服務

預設端口:8510

1、實時更新叢集中所有聊天伺服器上的使用者狀态(線上、離線);

2、提供HTTP接口,用于查詢叢集中所有IM伺服器的位址,以及目前每台伺服器上線上使用者數;

3、提供HTTP接口,用于查詢指定使用者的線上狀态;

使用說明:

1、上層業務通過“/importal/getimserverlist.do”接口擷取叢集中所有IM伺服器清單;

2、根據目前IM伺服器上登入的使用者數量,來決定使用者登入到哪台IM伺服器上;

3、improxy.exe

概要介紹:消息轉發服務。

1、連接配接importal服務,擷取叢集中所有imserver伺服器位址;

2、轉發登入在不同imserver伺服器上的使用者消息和群組消息;

四、如何建立IM伺服器叢集

隻需一分鐘,一個配置項。

1、部署importal服務,輕按兩下importal.exe即可。

2、配置imserver上的imconfig.ini檔案

通過imconfig.ini配置檔案中的PortalServer字段設定portal伺服器的位址。如:PortalServer=127.0.0.1:8510。

imserver伺服器啟動會讀取該配置項,并連接配接到importal服務上。

3、部署improxy服務,輕按兩下improxy.exe即可,improxy會通過importal擷取所有IM伺服器。

注意:imserver、importal、improxy最好分别部署在不同的伺服器上。

五、示範位址

單機使用者5萬時的并發示範。

IM伺服器:我的千萬級即時通信伺服器叢集

六、下載下傳位址

點選此處通路下載下傳位址

七、web調用案例

見文章《IM伺服器:一個使用imserver伺服器進行聊天的web端案例》

繼續閱讀