天天看點

J-IM 輕量、高性能的線上使用者IM系統

作者:GitHub精選
《開源精選》是我們分享Github、Gitee等開源社群中優質項目的欄目,包括技術、學習、實用與各種有趣的内容。本期推薦的J-IM 是用JAVA語言開發的輕量、高性能、單機支援幾十萬至百萬線上使用者IM系統。
J-IM 輕量、高性能的線上使用者IM系統

目标

J-IM主要目标降低即時通訊門檻,快速打造低成本接入線上IM系統,通過極簡潔的消息格式就可以實作多端不同協定間的消息發送如内置(Http、Websocket、Tcp自定義IM協定)等,并提供通過http協定的api接口進行消息發送無需關心接收端屬于什麼協定

主要特點

  • 高性能(單機可支援幾十萬至百萬人同時線上)
  • 輕量、可擴充性極強
  • 支援叢集多機部署
  • 支援SSL/TLS加密傳輸
  • 消息格式極其簡潔(JSON)
  • 一端口支援可插拔多種協定(Socket自定義IM協定、Websocket、Http),各協定可分别獨立部署。
  • 内置消息持久化(離線、曆史、漫遊),保證消息可靠性,高性能存儲
  • 各種豐富的API接口。
  • 零成本部署,一鍵啟動。

消息格式

聊天請求消息結構

{
   "from": "來源ID",
   "to": "目标ID",
   "cmd":"指令碼(11)int類型",
   "createTime": "消息建立時間long類型",
   "msgType": "消息類型int類型(0:text、1:image、2:voice、3:vedio、4:music、5:news)",
   "chatType":"聊天類型int類型(0:未知,1:公聊,2:私聊)",
   "groupId":"群組id僅在chatType為(1)時需要,String類型",
   "content": "内容",
   "extras" : "擴充字段,JSON對象格式如:{'擴充字段名稱':'擴充字段value'}"
}           

請求:COMMAND_CHAT_REQ(11) 響應:COMMAND_CHAT_RESP(12)

鑒權請求消息結構

{
    "cmd":"指令碼(3)int類型",
    "token": "校驗碼"
}           

請求:COMMAND_AUTH_REQ(3) 響應:COMMAND_AUTH_RESP(4)

握手請求消息結構

{
    "cmd":"指令碼(1)int類型",
    "hbyte":"握手1個位元組"
}           

說明:請求:COMMAND_HANDSHAKE_REQ(1) 響應:COMMAND_HANDSHAKE_RESP(2)

登入請求消息結構

{
    "cmd":"指令碼(5)int類型",
    "userId": "使用者賬号",
    "password": "密碼",
    "token": "校驗碼(此字段可與userId、password共存,也可隻選一種方式)"
}           

請求:COMMAND_LOGIN_REQ(5) 響應:COMMAND_LOGIN_RESP(6)

心跳請求消息結構

{
    "cmd":"指令碼(13)int類型",
    "hbbyte":"心跳1個位元組"
}           

請求:COMMAND_HEARTBEAT_REQ(13) 響應:COMMAND_HEARTBEAT_REQ(13)

關閉、退出請求消息結構

{
    "cmd":"指令碼(14)int類型",
    "userId":"使用者ID"
}           

擷取持久化聊天消息(離線+曆史+漫遊)請求結構

{
     "cmd":"指令碼(19)int類型",
     "fromUserId":"消息發送使用者id(此字段必須與userId一起使用,擷取雙方聊天消息),非必填",
     "userId":"目前使用者id(必填字段),當隻有此字段時,type必須為0,意思是擷取目前使用者所有離線消息(好友+群組)",
     "groupId":"群組id(此字段必須與userId一起使用,擷取目前使用者指定群組聊天消息),非必填",
     "beginTime":"消息區間開始時間Date毫秒數double類型,非必填",
     "endTime":"消息區間結束時間Date毫秒數double類型,非必填",
     "offset":"分頁偏移量int類型,類似Limit 0,10 中的0,非必填",
     "count":"顯示消息數量,類似Limit 0,10 中的10,非必填",
     "type":"消息類型(0:離線消息,1:曆史消息)"
}           

請求:COMMAND_GET_MESSAGE_REQ(19) 響應:COMMAND_GET_MESSAGE_RESP(20)

使用

  • 服務端(快速開發自己的高性能IM伺服器):引入jim-server,在你的pom.xml中加入如下代碼片段
<dependency>
    <groupId>org.j-im</groupId>
    <artifactId>jim-server</artifactId>
    <version>3.0.0.v20200501-RELEASE</version>
</dependency>           
  • 用戶端(快速開發自己的IM用戶端):引入jim-client,在你的pom.xml中加入如下代碼片段
<dependency>
    <groupId>org.j-im</groupId>
    <artifactId>jim-client</artifactId>
    <version>3.0.0.v20200501-RELEASE</version>
</dependency>           

J-IM截圖

J-IM 輕量、高性能的線上使用者IM系統
J-IM 輕量、高性能的線上使用者IM系統

J-IM老版截圖

J-IM 輕量、高性能的線上使用者IM系統
J-IM 輕量、高性能的線上使用者IM系統

-END-

開源協定:Apache-2.0

開源位址:https://gitee.com/xchao/j-im

繼續閱讀