一、伺服器特點
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萬時的并發示範。
六、下載下傳位址
點選此處通路下載下傳位址
七、web調用案例
見文章《IM伺服器:一個使用imserver伺服器進行聊天的web端案例》