IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统

IM 开源系列

IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术,提供优质可控的IM+RTC能力

IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统

IM 即时通讯系统-43-简单的仿QQ聊天安卓APP

IM 即时通讯系统-44-仿QQ即时通讯系统服务端

IM 即时通讯系统-45-merua0oo0 IM 分布式聊天系统

IM 即时通讯系统-46-OpenIM 提供了专为开发者设计的开源即时通讯解决方案

IM 即时通讯系统-47-beardlessCat IM 使用netty开发分布式Im,提供分布netty集群解决方案

IM 即时通讯系统-48-aurora-imui 是个通用的即时通讯(IM)UI 库,不特定于任何 IM SDK

IM 即时通讯系统-49-云信 IM UIKit 是基于 NIM SDK(网易云信 IM SDK)开发的一款即时通讯 UI 组件库,包括聊天、会话、圈组、搜索、群管理等组件

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

IM 即时通讯系统-51-MPush开源实时消息推送系统

IM 即时通讯系统-52-leo-im 服务端

IM 即时通讯系统-53-im system server

IM

https://github.com/crossoverJie/cim

CIM

V2.0

x\] 升级至 JDK17 和 Spring Boot 3.0 \[x\] 客户端 SDK \[ \] 客户端使用 picocli 替代 Spring Boot。 \[x\] 支持集成测试。 \[ \] 集成 OpenTelemetry。 \[ \] 支持单节点启动(不含任何组件)。 \[ \] 支持第三方组件替换(如 Redis/Zookeeper 等)。 \[ \] 支持 Web 客户端(WebSocket)。 \[ \] 支持 Docker 容器。 \[ \] 支持 Kubernetes 运行。 \[ \] 支持二进制客户端(使用 Golang 构建)。 ## 介绍 CIM(CROSS-IM) 是一个面向开发者的 IM(即时通讯) 系统,同时也提供了一些组件,帮助开发者构建可扩展的 IM 系统。使用 CIM,您可以实现以下需求: 实现 IM 即时通讯系统。 为 APP 提供消息推送中间件。 为 IOT 大规模连接场景提供消息中间件。 如果在使用或开发过程中有任何问题,您可以联系作者。 ### TODO LIST * [x] [群聊](#群聊) * [x] [私聊](#私聊) * [x] [内置命令](#内置命令) * [x] [聊天记录查询](#聊天记录查询)。 * [x] [一键开启价值 2 亿的 `AI` 模式](#一键开启价值 2 亿的 AI 模式) * [x] 使用 `Google Protocol Buffer` 高效编解码 * [x] 根据实际情况灵活的水平扩容、缩容 * [x] 服务端自动剔除离线客户端 * [x] 客户端自动重连 * [x] [延时消息](#延时消息) * [x] SDK 开发包 * [ ] 分组群聊 * [ ] 离线消息 * [ ] 消息加密 ### 架构 CIM 中的每个组件都是使用 SpringBoot 构建的。 客户端使用 cim-client-sdk 构建。 使用 Netty 构建底层通信。 使用 MetaStore 用于 IM-server 服务的注册与发现。 ### cim-server IM 服务器用于接收客户端连接、消息转发、消息推送等功能,支持集群部署。 ### cim-route 路由服务器,用于处理消息路由、消息转发、用户登录、用户离线以及一些运维工具(如获取在线用户数量等)。 ### cim-client IM 客户端终端,可以通过命令启动并与他人进行通信(群聊、私聊)。 ### 流程图 ![流程图](https://i-blog.csdnimg.cn/img_convert/fb7ec726671866dfee8bc2d7773612ef.png) * 服务器向 MetaStore 注册。 * 路由服务器订阅 MetaStore。 * 客户端登录到路由服务器。 * 路由服务器从 MetaStore 获取服务器信息。 * 客户端与服务器建立连接。 * 客户端 1 向路由服务器发送消息。 * 路由服务器选择服务器并将消息转发到服务器。 * 服务器将消息推送至客户端 2。 ### 快速启动 首先需要安装 `Zookeeper、Redis` 并保证网络通畅。 ```shell 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 ``` ```shell 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 ``` #### 部署 IM-server(cim-server) ```shell 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) ```shell 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 代理即可。 #### 启动客户端 ```shell 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/ ``` 如上图,启动两个客户端可以互相通信即可。 #### 本地启动客户端 ##### 注册账号 ```shell curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "reqNo": "1234567890", "timeStamp": 0, "userName": "zhangsan" }' 'http://路由服务器:8083/registerAccount' ``` 从返回结果中获取 `userId` ```json { "code":"9000", "message":"成功", "reqNo":null, "dataBody":{ "userId":1547028929407, "userName":"test" } } ``` ##### 启动本地客户端 ```shell # 启动本地客户端 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]` | 发送延时消息 | | `:` | 更多命令正在开发中。。 | #### 聊天记录查询 ![](https://i-blog.csdnimg.cn/img_convert/f4f87016aebaca508a75912093120ab4.jpeg) 使用命令 `:q 关键字` 即可查询与个人相关的聊天记录。 > 客户端聊天记录默认存放在 `/opt/logs/cim/`,所以需要这个目录的写入权限。也可在启动命令中加入 `--cim.msg.logger.path = /自定义` 参数自定义目录。 #### AI 模式 ![](https://i-blog.csdnimg.cn/img_convert/9e4273ef0c16e41bbc3583d91f1acdc7.jpeg) 使用命令 `:ai` 开启 AI 模式,之后所有的消息都会由 `AI` 响应。 `:qai` 退出 AI 模式。 #### 前缀匹配用户名 ![](https://i-blog.csdnimg.cn/img_convert/796d0677346f8a7499ffdcdbfe37decf.jpeg) 使用命令 `:qu prefix` 可以按照前缀的方式搜索用户信息。 > 该功能主要用于在移动端中的输入框中搜索用户。

相关推荐
461K.30 分钟前
spark与hadoop的区别
大数据·运维·hadoop·分布式·spark·intellij-idea
Java知识库1 小时前
Java BIO、NIO、AIO、Netty面试题(已整理全套PDF版本)
java·开发语言·jvm·面试·程序员
西瓜本瓜@1 小时前
在 Android 中实现通话录音
android·java·开发语言·学习·github·android-studio
嘵奇2 小时前
基于Spring Boot实现文件秒传的完整方案
java·spring boot·后端
V功夫兔2 小时前
Spring_MVC 高级特性详解与实战应用
java·经验分享·笔记·spring
小兵张健2 小时前
小米 JD 调研
java·后端·面试
马院代表人2 小时前
IDEA内存配置失效(已解决)
java·ide·intellij-idea
hepherd2 小时前
音视频学习 - MP3格式
java·ffmpeg·intellij idea
码农sssss2 小时前
idea30天使用无限使用
java·ide·intellij-idea
编号55662 小时前
时间类型格式化问题踩坑
java