發表文章

目前顯示的是 8月, 2019的文章

分佈式IM(即時通訊) 系統

圖片
老讀者應該還記得我在去年國慶節前分享過一篇 《設計一個百萬級的消息推送系統》 ;雖然我在文中有貼一些偽代碼,依然有些朋友希望能直接分享一些可以運行的源碼;這麼久了是時候把坑填上了。 目錄結構: 於是在之前的基礎上我完善了一些內容,先來看看這個項目的介紹吧: CIM(CROSS-IM) 一款面向開發者的 IM(即时通讯) 系統;同時提供了一些組件幫助開發者構建一款屬於自己可水平擴展的 IM 。 借助 CIM 你可以實現以下需求: IM 即時通訊系統。 適用於 APP 的消息推送中間件。 IOT 海量連接場景中的消息透傳中間件。 完整源碼託管在GitHub : github.com/crossoverJi… 架構設計 下面來看看具體的架構設計。 CIM 中的各個組件均採用 SpringBoot 構建。 採用 Netty + Google Protocol Buffer 構建底層通信。 Redis 存放各個客戶端的路由信息​​、賬號信息、在線狀態等。 Zookeeper 用於 IM-server 服務的註冊與發現。 整體主要由以下模塊組成: cim-server IM 服務端;用於接收 client 連接、消息透傳、消息推送等功能。 支持集群部署。 cim-forward-route 消息路由服務器;用於處理消息路由、消息轉發、用戶登錄、用戶下線以及一些運營工具(獲取在線用戶數等)。 cim-client IM 客戶端;給用戶使用的消息終端,一個命令即可啟動並向其他人發起通訊(群聊、私聊);同時內置了一些常用命令方便使用。 流程圖 整體的流程也比較簡單,流程圖如下: 客戶端向 route 發起登錄。 登錄成功從 Zookeeper 中選擇可用 IM-server 返回給客戶端,並保存登錄、路由信息到 Redis 。 客戶端向 IM-server 發起長連接,成功後保持心跳。 客戶端下線時通過 route 清除狀態信息。 所以當我們自己部署時需要以下步驟: 搭建基礎中間件 Redis、Zookeeper 。 部署 cim-server ,這是真正的IM服務器,為了滿足性能需求所以支持水平擴展,只需要註冊