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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zemax 中带有体素探测器的激光谐振腔

激光谐振腔是激光系统的基本组成部分,在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高(后镜),而另一个镜子部分透明(输出耦合器)。…

mac连接linux服务器

1、mac连接linux服务器 # ssh -p 22 root192.168.1.152、mac指定密码连接linux服务器 (1) 先安装sshpass,下载后解压执行 ./configure && make && makeinstall https://sourceforge.net/projects/sshpass/ (2) 连接linux # sshpass -p \/\\\[\!\\wen12\$ s…

17.2 图形绘制4

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 17.2.5 线条样式 C#为画笔绘制线段提供了多种样式:一是线帽(包括起点和终点处)样式&#xff1b…

基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 (1)系统首页 &#xff…

计算机网络 应用层 笔记 (电子邮件系统,SMTP,POP3,MIME,IMAP,万维网,HTTP,html)

电子邮件系统: SMTP协议 基本概念 工作原理 连接建立: 命令交互 客户端发送命令: 服务器响应: 邮件传输: 连接关闭: 主要命令 邮件发送流程 SMTP的缺点: MIME: POP3协议 基本概念…

React基础知识回顾详解

以下是React从前端面试基础到进阶的系统性学习内容,包含核心知识点和常见面试题解析: 一、React基础核心 JSX原理与本质 JSX编译过程(Babel转换)虚拟DOM工作原理面试题:React为何使用className而不是class?…

Golang Gin系列-9:Gin 集成Swagger生成文档

文档一直是一项乏味的工作(以我个人的拙见),但也是编码过程中最重要的任务之一。在本文中,我们将学习如何将Swagger规范与Gin框架集成。我们将实现JWT认证,请求体作为表单数据和JSON。这里唯一的先决条件是Gin服务器。…

零基础学习书生.浦语大模型-入门岛

第一关:Linux基础知识 Cursor连接服务器 使用Remote - SSH插件即可 注:46561:服务器端口号 运行指令 python hello_world.py端口映射 ssh -p 46561 rootssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyCheckingno …

【SSM】Spring + SpringMVC + Mybatis

SSM课程,以下为该课程的笔记 bean:IOC容器创建的对象 P12 bean的生命周期 在bean中定义init()和destroy()方法,然后在xml中配置方法名,让bean对象能找到对应的生命周期方法。 或通过实现接口的方式定义声明周期方法。 P13 sett…

python recv的概念和使用案例

recv 是网络编程中用于从套接字接收数据的核心函数,常见于 TCP/UDP 通信。以下是其概念、用法和案例详解: 概念 作用:从已连接(TCP)或已绑定(UDP)的套接字接收数据。参数: bufsize:…

【Block总结】MAB,多尺度注意力块|即插即用

文章目录 一、论文信息二、创新点三、方法MAB模块解读1、MAB模块概述2、MAB模块组成3、MAB模块的优势 四、效果五、实验结果六、总结代码 一、论文信息 标题: Multi-scale Attention Network for Single Image Super-Resolution作者: Yan Wang, Yusen Li, Gang Wang, Xiaoguan…

Hive存储系统全面测试报告

引言 在大数据时代,数据存储和处理技术的重要性日益凸显。Apache Hive作为一个基于Hadoop的数据仓库工具,因其能够提供类SQL查询功能(HiveQL)而广受欢迎。Hive的设计初衷是为了简化大数据集的查询和管理,它允许用户通…

Dijkstra算法解析

Dijkstra算法,用于求解图中从一个起点到其他所有节点的最短路径。解决单源最短路径问题的有效方法。 条件 有向 带权路径 时间复杂度 O(n平方) 方法步骤 1 把图上的点分为两个集合 要求的起点 和除了起点之外的点 。能直达的写上权值 不…

【深度学习】DeepSeek模型介绍与部署

原文链接:DeepSeek-V3 1. 介绍 DeepSeek-V3,一个强大的混合专家 (MoE) 语言模型,拥有 671B 总参数,其中每个 token 激活 37B 参数。 为了实现高效推理和成本效益的训练,DeepSeek-V3 采用了多头潜在注意力 (MLA) 和 De…

深度学习深度解析:从基础到前沿

引言 深度学习作为人工智能的一个重要分支,通过模拟人脑的神经网络结构来进行数据分析和模式识别。它在图像识别、自然语言处理、语音识别等领域取得了显著成果。本文将深入探讨深度学习的基础知识、主要模型架构以及当前的研究热点和发展趋势。 基础概念与数学原理…

如何实现滑动列表功能

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了沉浸式状态栏相关的内容,本章回中将介绍SliverList组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的SliverList组件是一种列表类组件,类似我们之前介…

OpenEuler学习笔记(十七):OpenEuler搭建Redis高可用生产环境

在OpenEuler上搭建Redis高可用生产环境,通常可以采用Redis Sentinel或Redis Cluster两种方式,以下分别介绍两种方式的搭建步骤: 基于Redis Sentinel的高可用环境搭建 安装Redis 配置软件源:可以使用OpenEuler的默认软件源&#…

前沿课题推荐:提升水下导航精度的多源数据融合与算法研究

随着海洋探测技术的迅猛发展,水下地形匹配导航逐渐成为国际研究的热点领域。在全球范围内,水下导航技术的精确性对于科学探索、资源勘探及国防安全等方面都至关重要。我国在这一领域的研究与应用需求日益增长,亟需通过先进的技术手段提升水下…

[创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索

关键词: 从系统的角度,麻雀、人体系统、企业系统、软硬件系统、软件系统、通信系统、5G系统是类似的: 都有:内在看不见的规律、外在显性各种现象 都是:输入、处理、输出 都是:静态、要素、组成、结构、组织…

【疑问】固态硬盘也是以扇区作为单位吗

回答 固态硬盘(SSD)与传统机械硬盘(HDD)在存储结构技术不一样。 理由 机械硬盘使用旋转的磁盘和磁头来读写数据,所以有扇区、磁道和柱面等概念 而固态硬盘则使用闪存芯片来存储数据、没有机械部件,固态硬盘…