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萬時的並發演示

六、下載地址

點擊此處訪問下載地址