crossoverJie / cim
- четверг, 3 января 2019 г. в 00:17:39
Java
📲 cim(cross IM) 适用于开发者的即时通讯系统
CIM(CROSS-IM) 一款面向开发者的 IM(即时通讯)系统;同时提供了一些组件帮助开发者构建一款属于自己可水平扩展的 IM 。
借助 CIM 你可以实现以下需求:
IM 即时通讯系统。APP 的消息推送中间件。IOT 海量连接场景中的消息透传中间件。我有在公网部署了一套演示环境,想要体验的可以联系我加入内测群获取账号。
点击下方链接可以查看视频版 Demo。
| YouTube | Bilibili |
|---|---|
| 群聊 私聊 | 群聊 私聊 |
![]() |
![]() |
IM 服务端;用于接收 client 连接、消息透传、消息推送等功能。
支持集群部署。
消息路由服务器;用于处理消息路由、消息转发、用户登录、用户下线以及一些运营工具(获取在线用户数等)。
IM 客户端;给用户使用的消息终端,一个命令即可启动并向其他人发起通讯(群聊、私聊)。
Google Protocol Buffer 高效编解码。cim-forward-route)服务自身是无状态,可用 Nginx 代理支持高可用。CIM 中的各个组件均采用 SpringBoot 构建。Netty 构建底层通信。Redis 存放各个客户端的路由信息、账号信息、在线状态等。Zookeeper 用于 IM-server 服务的注册与发现。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 packagecp /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 地址相同即可。
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.group.route.request.url=http://路由服务器:8083/groupRoute --cim.server.route.request.url=http://路由服务器:8083/login如上图,启动两个客户端可以互相通信即可。
| 命令 | 描述 |
|---|---|
:q |
退出客户端 |
:olu |
获取所有在线用户信息 |
:all |
获取所有命令 |
: |
更多命令正在开发中。。 |
群聊只需要在控制台里输入消息回车后即可发送,同时所有在线客户端都可收到消息。
私聊首先需要知道对方的 userID 才能进行。
输入命令 :olu 可列出所有在线用户。
接着使用 userId;;消息内容 的格式即可发送私聊消息。