時隔五年 9K star 的 IM 項目發布 v2.0.0 了
上次發版還是在五年前了:
因為確實已經很久沒有更新了,在開始之前還是先介紹 cim 是什么。
這里有一張簡單的使用圖片:
圖片
同時以前也有錄過相關的視頻:
通過 cim 這個名字和視頻可以看出,它具備 IM 即時通訊的基本功能,同時基于它可以實現:
- 即時通訊
- 消息推送
- IOT 消息平臺
現在要在本地運行簡單許多了,前提是有 docker 就可以了。
docker run --rm --name zookeeper -d -p 2181:2181 zookeeper:3.9.2
docker run --rm --name redis -d -p 6379:6379 redis:7.4.0
git clone https://github.com/crossoverJie/cim.git
cd cim
mvn clean package -DskipTests=true
cd cim-server && cim-client && cim-forward-route
mvn clean package spring-boot:repackage -DskipTests=true
架構
cim 的架構圖如下:
圖片
主要分為三個部分:
- Client 基本交互功能
消息收發
消息查詢
延遲消息
- Route 提供了消息路由以及相關的管理功能
API 轉發
消息推送
會話管理
可觀測性
Server 主要就提供長鏈接能力,以及真正的消息推送
同時還有元數據中心(支持擴展實現)、消息存儲等組件;
不管是客戶端、route、server 都是支持集群:
- route 由于是無狀態,可以任意擴展
- server 通過注冊中心也支持集群部署,當發生宕機或者是擴容時,客戶端會通過心跳和重連機制保證可用性。
所以整個架構不存在單點,同時比較簡單清晰的,大部分組件都支持可擴展。
流程
圖片
為了更方便理解,花了一個流程圖。
- server 在啟動之后會先在元數據中心注冊
- 同時 route 會訂閱元數據中的 server 信息
- 客戶端登陸時會調用 route 獲取一個 server 的節點信息
- 然后發起登陸請求。
成功之后會保持長鏈接。
- 客戶端向發送消息時會調用 route 接口來發起消息
route 根據長鏈接關系選擇 server 進行消息推送
v2.0.0
接下來介紹下本次 v2.0.0 有哪些重大變更,畢竟是修改了大的版本號。
這里列舉一些重大的改動:
圖片
- 首先是支持了元數據中心,解耦了 zookeeper,也支持自定義實現。
- 支持了集成測試,可以保證提交的 PR 對現有功能的影響降到最低,代碼質量有一定保證;review 代碼時更加放心。
- 單獨抽離了 client-sdk,代碼耦合性更好且更易維護。
- 服務之間調用的 RPC 完成了重構
支持了動態 URL
泛型數據解析
- 還有社區小伙伴貢獻的一些 bug 修復、RpcProxyManager 的 IOC 支持等特性。
總結
更多的部署和使用可以參考項目首頁的 README,有詳細的介紹。
cim 目前還需要優化的地方非常多;接下來的重點是實現 ACK,同時會完善一下通訊協議。
圖片
todo 列表我也添加了很多,所以非常推薦感興趣的朋友可以先看看 todo 列表,說不定就有你感興趣的可以參與一下。