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

news2025/2/3 5:26:31

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.coloradmin.cn/o/2291103.html

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

相关文章

Python在线编辑器

from flask import Flask, render_template, request, jsonify import sys from io import StringIO import contextlib import subprocess import importlib import threading import time import ast import reapp Flask(__name__)RESTRICTED_PACKAGES {tkinter: 抱歉&…

ZZNUOJ(C/C++)基础练习1041——1050(详解版)

1041 : 数列求和2 题目描述 输入一个整数n&#xff0c;输出数列1-1/31/5-……前n项的和。 输入 输入只有一个整数n。 输出 结果保留2为小数,单独占一行。 样例输入 3 样例输出 0.87注意sum 1相当于sumsum1 注意sum * 1相当于sumsum*1 C语言版 #include<stdio.h> // 包含…

浅析DDOS攻击及防御策略

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

深度学习 Pytorch 神经网络的学习

本节将从梯度下降法向外拓展&#xff0c;介绍更常用的优化算法&#xff0c;实现神经网络的学习和迭代。在本节课结束将完整实现一个神经网络训练的全流程。 对于像神经网络这样的复杂模型&#xff0c;可能会有数百个 w w w的存在&#xff0c;同时如果我们使用的是像交叉熵这样…

【回溯】目标和 字母大小全排列

文章目录 494. 目标和解题思路&#xff1a;回溯784. 字母大小写全排列解题思路&#xff1a;回溯 494. 目标和 494. 目标和 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

记录一次,PyQT的报错,多线程Udp失效,使用工具如netstat来检查端口使用情况。

1.问题 报错Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 932, in _bootstrap_inner File "threading.py", line 870, in run File "main.py", line 456, in udp_recv IndexError: list…

群晖NAS安卓Calibre 个人图书馆

docker 下载镜像johngong/calibre-web&#xff0c;安装之 我是本地的/docker/xxx/metadata目录 映射到 /usr/local/calibre-web/app/cps/metadata_provider CALIBREDB_OTHER_OPTION 删除 CALIBRE_SERVER_USER calibre_server_user 缺省用户名口令 admin admin123 另外有个N…

android主题设置为..DarkActionBar.Bridge时自定义DatePicker选中日期颜色

安卓自定义DatePicker选中日期颜色 背景&#xff1a;解决方案&#xff1a;方案一&#xff1a;方案二&#xff1a;实践效果&#xff1a; 背景&#xff1a; 最近在尝试用原生安卓实现仿element-ui表单校验功能&#xff0c;其中的的选择日期涉及到安卓DatePicker组件的使用&#…

彩色控制台,自动换行...学习个新概念:流操控器![more cpp--11]

孩子们&#xff0c;我回来了。先看看今天我又学了什么CPP的没啥用新特性。彩色的控制台&#xff01; 还有很多的新花样&#xff01; 事情要从去年八月讲起&#xff0c;我那个时候在研究流函数&#xff0c;写了一些比较愚笨的代码。 为什么要研究这个呢&#xff1f;虽然我们的C…

基于单片机的盲人智能水杯系统(论文+源码)

1 总体方案设计 本次基于单片机的盲人智能水杯设计&#xff0c;采用的是DS18B20实现杯中水温的检测&#xff0c;采用HX711及应力片实现杯中水里的检测&#xff0c;采用DS1302实现时钟计时功能&#xff0c;采用TTS语音模块实现语音播报的功能&#xff0c;并结合STC89C52单片机作…

TensorFlow 示例摄氏度到华氏度的转换(一)

TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换&#xff0c;可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 …

win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件Page Assist)

win10部署本地deepseek-r1&#xff0c;chatbox&#xff0c;deepseek联网&#xff08;谷歌网页插件Page Assist&#xff09; 前言一、本地部署DeepSeek-r1step1 安装ollamastep2 下载deepseek-r1step2.1 找到模型deepseek-r1step2.2 cmd里粘贴 后按回车&#xff0c;进行下载 ste…

【memgpt】letta 课程6: 多agent编排

Lab 6: Multi-Agent Orchestration 多代理协作 letta 是作为一个服务存在的,app通过restful api 通信 多智能体之间如何协调与沟通? 相互发送消息共享内存块,让代理同步到不同的服务的内存块

Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

【Linux】opencv在arm64上提示找不到libjasper-dev

解决opencv在arm64上提示找不到libjasper-dev的问题。 本文首发于❄慕雪的寒舍 问题说明 最近我在尝试编译opencv&#xff0c;安装依赖项libjasper1和libjasper-dev的时候就遇到了这个问题。在amd64平台上&#xff0c;我们可以通过下面的命令安装&#xff08;ubuntu18.04&…

LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控

在电机自动化生产线中&#xff0c;实时数据采集与生产过程监控是确保生产效率和产品质量的重要环节。LabVIEW作为一种强大的图形化编程平台&#xff0c;可以有效实现数据采集、实时监控和自动化控制。详细探讨如何利用LabVIEW实现这一目标&#xff0c;包括硬件选择、软件架构设…

Baklib揭示内容中台与人工智能技术的创新协同效应

内容概要 在当今信息爆炸的时代&#xff0c;内容的高效生产与分发已成为各行业竞争的关键。内容中台与人工智能技术的结合&#xff0c;为企业提供了一种新颖的解决方案&#xff0c;使得内容创造的流程更加智能化和高效化。 内容中台作为信息流动的核心&#xff0c;能够集中管…

18.Word:数据库培训课程❗【34】

目录 题目 NO1.2.3.4 NO5设置文档内容的格式与样式 NO6 NO7 NO8.9 NO10.11标签邮件合并 题目 NO1.2.3.4 FnF12&#xff1a;打开"Word素材.docx”文件,将其另存为"Word.docx”在考生文件夹下之后到任务9的所有操作均基于此文件&#xff1a;"Word.docx”…

git多人协作

目录 一、项目克隆 二、 1、进入克隆仓库设置 2、协作处理 3、冲突处理 4、多人协作分支的推送拉取删除 1、分支推送&#xff08;2种&#xff09; 2、远程分支拉取&#xff08;2种&#xff09; 3、远程分支删除 一、项目克隆 git clone 画船听雨眠/test1 (自定义的名…