当前位置: 首页 > news >正文

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

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

  • 群聊
  • 私聊
  • 内置命令
  • 聊天记录查询。
  • 一键开启价值 2 亿的 AI 模式
  • 使用 Google Protocol Buffer 高效编解码
  • 根据实际情况灵活的水平扩容、缩容
  • 服务端自动剔除离线客户端
  • 客户端自动重连
  • 延时消息
  • SDK 开发包
  • 分组群聊
  • 离线消息
  • 消息加密

架构

CIM 中的每个组件都是使用 SpringBoot 构建的。

客户端使用 cim-client-sdk 构建。

使用 Netty 构建底层通信。

使用 MetaStore 用于 IM-server 服务的注册与发现。

cim-server

IM 服务器用于接收客户端连接、消息转发、消息推送等功能,支持集群部署。

cim-route

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

cim-client

IM 客户端终端,可以通过命令启动并与他人进行通信(群聊、私聊)。

流程图

流程图

  • 服务器向 MetaStore 注册。

  • 路由服务器订阅 MetaStore。

  • 客户端登录到路由服务器。

  • 路由服务器从 MetaStore 获取服务器信息。

  • 客户端与服务器建立连接。

  • 客户端 1 向路由服务器发送消息。

  • 路由服务器选择服务器并将消息转发到服务器。

  • 服务器将消息推送至客户端 2。

快速启动

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

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

部署 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 可以按照前缀的方式搜索用户信息。

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

相关文章:

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

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术,提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…...

QtCreator在配置Compilers时,有一个叫ABI的选项,那么什么是ABI?

问题提出 QtCreator在配置Compilers时,有一个叫ABI的选项,那么什么是ABI? ABI(Application Binary Interface)介绍 ABI(Application Binary Interface,应用二进制接口)是指应用程序与操作系统或其他程序…...

处理 **5万字(约7.5万-10万token,中文1字≈1.5-2token)** 的上下文

处理 5万字(约7.5万-10万token,中文1字≈1.5-2token) 的上下文,对模型的长文本处理能力和显存要求较高。以下是不同规模模型的适用性分析及推荐: 一、模型规模与上下文能力的关系 模型类型参数量最大上下文长度&#…...

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…...

springboot 启动原理

目标: SpringBootApplication注解认识了解SpringBoot的启动流程 了解SpringFactoriesLoader对META-INF/spring.factories的反射加载认识AutoConfigurationImportSelector这个ImportSelector starter的认识和使用 目录 SpringBoot 启动原理SpringBootApplication 注…...

浅析DDOS攻击及防御策略

DDoS(分布式拒绝服务)攻击是一种通过大量计算机或网络僵尸主机对目标服务器发起大量无效或高流量请求,耗尽其资源,从而导致服务中断的网络攻击方式。这种攻击方式利用了分布式系统的特性,使攻击规模更大、影响范围更广…...

Linux网络 HTTPS 协议原理

概念 HTTPS 也是一个应用层协议,不过 是在 HTTP 协议的基础上引入了一个加密层。因为 HTTP的内容是明文传输的,明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的…...

Idea插件开发

相关操作 执行插件 导出插件 然后到 /build/distributions 目录下面去找...

Java 有很多常用的库

1. 常用工具类库 Apache Commons:提供了大量常用的工具类,如: commons-lang3:字符串、数字、日期等常用工具类。commons-io:IO 操作,文件读写、流处理等。commons-collections4:集合类扩展。 G…...

pytorch实现文本摘要

人工智能例子汇总:AI常见的算法和例子-CSDN博客 import numpy as npfrom modelscope.hub.snapshot_download import snapshot_download from transformers import BertTokenizer, BertModel import torch# 下载模型到本地目录 model_dir snapshot_download(tians…...

C++基础day1

前言:谢谢阿秀,指路阿秀的学习笔记 一、基础语法 1.构造和析构: 类的构造函数是一种特殊的函数,在创建一个新的对象时调用。类的析构函数也是一种特殊的函数,在删除所创建的对象时调用。 构造顺序:父类->子类 析…...

从TinyZero的数据与源码来理解DeepSeek-R1-Zero的强化学习训练过程

1. 引入 TinyZero(参考1)是伯克利的博士生复现DeepSeek-R1-Zero的代码参仓库,他使用veRL来运行RL强化学习方法,对qwen2.5的0.5B、1.5B、3B等模型进行训练,在一个数字游戏数据集上,达到了较好的推理效果。 …...

爬虫基础(四)线程 和 进程 及相关知识点

目录 一、线程和进程 (1)进程 (2)线程 (3)区别 二、串行、并发、并行 (1)串行 (2)并行 (3)并发 三、爬虫中的线程和进程 &am…...

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉,Oracle提供了Impdp和ExpDp工具,功能很强大,可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具,在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…...

队列—学习

1. 手写队列的实现 使用数组实现队列是一种常见的方法。队列的基本操作包括入队(enqueue)和出队(dequeue)。队列的头部和尾部分别用 head 和 tail 指针表示。 代码实现 const int N 10000; // 定义队列容量,确保够…...

SpringBoot的配置(配置文件、加载顺序、配置原理)

文章目录 SpringBoot的配置(配置文件、加载顺序、配置原理)一、引言二、配置文件1、配置文件的类型1.1、配置文件的使用 2、多环境配置 三、加载顺序四、配置原理五、使用示例1、配置文件2、配置类3、控制器 六、总结 SpringBoot的配置(配置文件、加载顺序、配置原理) 一、引言…...

如何本地部署DeepSeek?DeepThink R1 本地部署全攻略:零基础小白指南。

🚀 离线运行 AI,免费使用 OpenAI 级别推理模型 本教程将手把手教你如何在本地部署 DeepThink R1 AI 模型,让你无需联网就能运行强大的 AI 推理任务。无论你是AI 新手还是资深开发者,都可以轻松上手! 📌 目录…...

陆游的《诗人苦学说》:从藻绘到“功夫在诗外”(中英双语)mastery lies beyond poetry

陆游的《诗人苦学说》:从藻绘到“功夫在诗外” 今天看万维钢的《万万没想到》一书,看到陆游的功夫在诗外的句子,特意去查找这首诗的原文。故而有此文。 我国学人还往往过分强调“功夫在诗外”这句陆游的名言,认为提升综合素质是一…...

Golang —协程池(panjf2000/ants/v2)

Golang —协程池(panjf2000/ants/v2) 1 ants1.1 基本信息1.2 ants 是如何运行的(流程图) 1 ants 1.1 基本信息 代码地址:github.com/panjf2000/ants/v2 介绍:ants是一个高性能的 goroutine 池&#xff0c…...

在 crag 中用 LangGraph 进行评分知识精炼-下

在上一次给大家展示了基本的 Rag 检索过程,着重描述了增强检索中的知识精炼和补充检索,这些都是 crag 的一部分,这篇内容结合 langgraph 给大家展示通过检索增强生成(Retrieval-Augmented Generation, RAG)的工作流&am…...

Meixiong Niannian画图引擎与STM32CubeMX结合:嵌入式GUI开发新思路

Meixiong Niannian画图引擎与STM32CubeMX结合:嵌入式GUI开发新思路 1. 引言 嵌入式设备的用户界面设计一直是个让人头疼的问题。传统的做法要么是找专业美工设计图片资源,要么是用代码硬编码绘制界面,前者成本高效率低,后者效果…...

人脸识别快速上手:Retinaface+CurricularFace镜像教程,简单易学

人脸识别快速上手:RetinafaceCurricularFace镜像教程,简单易学 1. 理解人脸识别黄金组合 在开始动手之前,我们先花两分钟了解Retinaface和CurricularFace这对黄金搭档: Retinaface:就像一位专业的摄影师&#xff0c…...

绝地求生游戏辅助工具:罗技鼠标宏自动化配置指南

绝地求生游戏辅助工具:罗技鼠标宏自动化配置指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在《绝地求生》这款高强度的战术竞技…...

无片外电容的LDO电路设计手册:完整IP现成电路,包含过温与过流保护、带隙与BUFFER,性能...

无片外电容LDO电路设计 完整IP现成电路,具有过温保护和过流保护,带隙,BUFFER都有 性能指标已流片验证 同时有相关文献、各模块电路功能分析简化计算笔记,适合学习入门不适合纵向可以附赠一些自己学习时觉得比较有帮助的资料。 有好…...

3分钟终极指南:如何永久冻结IDM试用期实现免费使用

3分钟终极指南:如何永久冻结IDM试用期实现免费使用 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM&#…...

OpenClaw+千问3.5-9B智能家居:自然语言控制HomeAssistant

OpenClaw千问3.5-9B智能家居:自然语言控制HomeAssistant 1. 为什么需要自然语言控制智能家居? 去年装修新房时,我安装了HomeAssistant系统来控制全屋灯光、空调和窗帘。虽然手机App能实现远程控制,但每次都要打开应用、找到对应…...

Vue 组态化管道流动效果:从零构建现代化流体模拟系统

1. 为什么需要管道流动模拟系统 在工业自动化和教学演示领域,可视化管道系统是一个常见需求。想象一下化工厂的液体输送管道、城市供水系统或者实验室的流体实验装置,这些场景都需要直观展示流体在管道中的流动状态。传统做法是使用静态图片或简单动画&a…...

掌握Pwndbg调试器:从入门到精通的界面定制与配置指南

掌握Pwndbg调试器:从入门到精通的界面定制与配置指南 【免费下载链接】pwndbg Exploit Development and Reverse Engineering with GDB & LLDB Made Easy 项目地址: https://gitcode.com/GitHub_Trending/pw/pwndbg Pwndbg作为GDB和LLDB的增强扩展&#…...

SeqGPT-560M效果展示:跨句指代消解能力——‘该公司’→‘北京智云科技有限公司’

SeqGPT-560M效果展示:跨句指代消解能力——‘该公司’→‘北京智云科技有限公司’ 今天,我想和你聊聊一个在信息抽取领域里特别“聪明”的能力——跨句指代消解。听起来有点专业,对吧?别担心,我用大白话给你解释。 想…...

HunyuanVideo-Foley快速入门:VSCode远程开发与模型调试指南

HunyuanVideo-Foley快速入门:VSCode远程开发与模型调试指南 1. 前言:为什么选择VSCode远程开发? 如果你正在使用HunyuanVideo-Foley这类音效生成模型,可能会遇到这样的困扰:本地机器性能不足,而云服务器虽…...