cim

📲cim(cross IM) 适用于开发者的分布式即时通讯系统

  • 所有者: crossoverJie/cim
  • 平台:
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

Build Status

📘介绍, 📽视频演示, 🏖TODO LIST, 🌈系统架构, 💡流程图, 🌁快速启动, 👨🏻‍✈️内置命令, 🎤通信, ❓QA, 💌联系作者

介绍

CIM(CROSS-IM) 一款面向开发者的 IM(即时通讯)系统;同时提供了一些组件帮助开发者构建一款属于自己可水平扩展的 IM

借助 CIM 你可以实现以下需求:

  • IM 即时通讯系统。
  • 适用于 APP 的消息推送中间件。
  • IOT 海量连接场景中的消息透传中间件。

在使用或开发过程中有任何疑问都可联系我

视频演示

点击下方链接可以查看视频版 Demo。, YouTube, Bilibili, :------:, :------:, 群聊 私聊, 群聊 私聊, ,

TODO LIST

系统架构

  • CIM 中的各个组件均采用 SpringBoot 构建。
  • 采用 Netty 构建底层通信。
  • Redis 存放各个客户端的路由信息、账号信息、在线状态等。
  • Zookeeper 用于 IM-server 服务的注册与发现。

cim-server

IM 服务端;用于接收 client 连接、消息透传、消息推送等功能。

支持集群部署。

cim-forward-route

消息路由服务器;用于处理消息路由、消息转发、用户登录、用户下线以及一些运营工具(获取在线用户数等)。

cim-client

IM 客户端;给用户使用的消息终端,一个命令即可启动并向其他人发起通讯(群聊、私聊)。

流程图

  • 客户端向 route 发起登录。
  • 登录成功从 Zookeeper 中选择可用 IM-server 返回给客户端,并保存登录、路由信息到 Redis
  • 客户端向 IM-server 发起长连接,成功后保持心跳。
  • 客户端下线时通过 route 清除状态信息。

快速启动

首先需要安装 Zookeeper、Redis 并保证网络通畅。

git clone https://github.com/crossoverJie/cim.git
cd cim
mvn -Dmaven.test.skip=true clean package

部署 IM-server(cim-server)

cp /cim/cim-server/target/cim-server-1.0.0-SNAPSHOT.jar /xx/work/server0/
cd /xx/work/server0/
nohup java -jar  /root/work/server0/cim-server-1.0.0-SNAPSHOT.jar --cim.server.port=9000 --app.zk.addr=zk地址  > /root/work/server0/log.file 2>&1 &

cim-server 集群部署同理,只要保证 Zookeeper 地址相同即可。

部署路由服务器(cim-forward-route)

cp /cim/cim-server/cim-forward-route/target/cim-forward-route-1.0.0-SNAPSHOT.jar /xx/work/route0/
cd /xx/work/route0/
nohup java -jar  /root/work/route0/cim-forward-route-1.0.0-SNAPSHOT.jar --app.zk.addr=zk地址 --spring.redis.host=redis地址 --spring.redis.port=6379  > /root/work/route/log.file 2>&1 &

cim-forward-route 本身就是无状态,可以部署多台;使用 Nginx 代理即可。

启动客户端

cp /cim/cim-client/target/cim-client-1.0.0-SNAPSHOT.jar /xx/work/route0/
cd /xx/work/route0/
java -jar cim-client-1.0.0-SNAPSHOT.jar --server.port=8084 --cim.user.id=唯一客户端ID --cim.user.userName=用户名 --cim.route.url=http://路由服务器:8083/


如上图,启动两个客户端可以互相通信即可。

本地启动客户端

注册账号

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
  "reqNo": "1234567890",
  "timeStamp": 0,
  "userName": "zhangsan"
}' 'http://路由服务器:8083/registerAccount'

从返回结果中获取 userId

{
    "code":"9000",
    "message":"成功",
    "reqNo":null,
    "dataBody":{
        "userId":1547028929407,
        "userName":"test"
    }
}

启动本地客户端

# 启动本地客户端
cp /cim/cim-client/target/cim-client-1.0.0-SNAPSHOT.jar /xx/work/route0/
cd /xx/work/route0/
java -jar cim-client-1.0.0-SNAPSHOT.jar --server.port=8084 --cim.user.id=上方返回的userId --cim.user.userName=用户名 --cim.route.url=http://路由服务器:8083/

客户端内置命令, 命令, 描述, ------, ------, :q!, 退出客户端, :olu, 获取所有在线用户信息, :all, 获取所有命令, :q [option], 【:q 关键字】查询聊天记录, :ai, 开启 AI 模式, :qai, 关闭 AI 模式, :pu, 模糊匹配用户, :info, 获取客户端信息, :emoji [option], 查询表情包 [option:页码], :delay [msg] [delayTime], 发送延时消息, :, 更多命令正在开发中。。,

聊天记录查询

使用命令 :q 关键字 即可查询与个人相关的聊天记录。

客户端聊天记录默认存放在 /opt/logs/cim/,所以需要这个目录的写入权限。也可在启动命令中加入 --cim.msg.logger.path = /自定义 参数自定义目录。

AI 模式

使用命令 :ai 开启 AI 模式,之后所有的消息都会由 AI 响应。

:qai 退出 AI 模式。

前缀匹配用户名

使用命令 :qu prefix 可以按照前缀的方式搜索用户信息。

该功能主要用于在移动端中的输入框中搜索用户。

群聊/私聊

群聊



群聊只需要在控制台里输入消息回车后即可发送,同时所有在线客户端都可收到消息。

私聊

私聊首先需要知道对方的 userID 才能进行。

输入命令 :olu 可列出所有在线用户。

接着使用 userId;;消息内容 的格式即可发送私聊消息。




同时另一个账号收不到消息。

emoji 表情支持

使用命令 :emoji 1 查询出所有表情列表,使用表情别名即可发送表情。


延时消息

发送 10s 的延时消息:

:delay delayMsg 10

联系作者

主要指標

概覽
名稱與所有者crossoverJie/cim
主編程語言Java
編程語言Java (語言數: 4)
平台
許可證MIT License
所有者活动
創建於2018-05-20 15:55:56
推送於2025-05-21 01:14:31
最后一次提交2025-05-21 09:14:31
發布數10
最新版本名稱v2.0.0 (發布於 )
第一版名稱0 (發布於 )
用户参与
星數9.4k
關注者數389
派生數2.9k
提交數531
已啟用問題?
問題數96
打開的問題數37
拉請求數55
打開的拉請求數3
關閉的拉請求數14
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?