# echo-im **Repository Path**: Yaolight/echo-im ## Basic Information - **Project Name**: echo-im - **Description**: 一个IM(即时通讯)项目的后端系统。支持IM系统核心功能:好友、私聊、群聊、离线消息、发送语音、图片、文件、emoji表情、回执消息、视频聊天等 严格遵循IM系统的四大原则:实时性、幂等性、不丢失、时序性。 主要基于 Spring Boot 和 Netty 开发 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/brother-one/echo-im - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 40 - **Created**: 2024-08-19 - **Last Updated**: 2024-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

logo

Echo IM 1.0.0

基于 SpringBoot 和 Netty 开发的即时通讯(IM)系统

## 介绍 **项目简介** :一个IM(即时通讯)项目的后端系统。 **支持 IM 系统核心功能** :好友、私聊、群聊、离线消息、发送语音、图片、文件、emoji表情、回执消息、视频聊天等 **严格遵循 IM 系统的四大原则:实时性、幂等性、不丢失、时序性。 、** **消息处理流** :用户通过 **HTTP** 请求将消息发送到 **im-platform** ,平台负责进行权限校验、数据脱敏和异步存储等工作,并为消息添加元数据,根据这些元数据, **im-client** 执行相应处理,并将消息发布到 **RabbitMQ** 。消息按照路由规则到达 **im-server** ,最终通过 **WebSocket** 协议实时推送给前端接收用户。 **主要技术栈** :SpringBoot、MyBatis、SpringSecurity、Netty、MySQL、Redis、RabbitMQ、WebSocket、Sa-Token、 Redission、Minio **详细文档** :https://gitee.com/brother-one/echo-im/tree/master/doc/md ## 系统架构(详见本项目 doc 文件夹) ![输入图片说明](doc/image/echoim%E6%9E%B6%E6%9E%84%E5%9B%BE%20(1).png) ## 可以写在简历上的亮点 1. **调研与选型** :深入调研了多种 IM 系统架构设计和实现方式,明确技术选型,确保项目技术方案的可行性和高扩展性 2. 基于Sa-Token+Redis构建 **认证模块** :实现 **双Token** 授权, **强制下线** ,同终端互斥登录,集成Gitee、Github第三方登录 3. **高可靠的 WebSocket 信道** :实现 连接鉴权、 **心跳检测与续期** 、断线重连机制,并实时上报用户状态,保证信道可靠性和持续性 4. **可靠性** :实现应用层ACK **时间轮** 队列、离线消息的 **双重存储** + **会话级分布式锁** 、MQ **任务补偿** 、可靠信道,保证高可靠 5. **实时性** :通过双级缓存、高效的ACK和离线消息机制、RabbitMQ 异步解耦、Netty NIO 及分布式部署,保证实时性 6. **扩展性** :设计可扩展的底层数据模型, **防止消息扩散风暴** ,确保 **功能内部复用** ,灵活运用设计模式,保障扩展性 7. 去中心化的**消息推送架构**:基于RabbitMQ构建去中心化消息推送架构,使系统具备集群化部署能力,提高并发处理性能 8. 重构与封装:将消息分发、消息队列(MQ)和仓储功能封装为 Spring Boot **Starter** , **遵循SPI 规范** ,实现低耦合与高扩展性 9. 使用 **Nginx** 部署项目:实现 反向代理、动静分离,并配置负载均衡和 HTTPS,确保系统的高可用性和安全性 ## 功能支持 ### 多端登录 :white_check_mark: 同用户同终端登录互斥 ### 消息类型 :white_check_mark: **文本消息**:消息内容是普通文本 :white_check_mark: **图片消息**:消息内容为图片URL地址、尺寸、图片大小等信息 :white_check_mark: **表情消息**:表情消息为开发者自定义 :white_check_mark: **语音消息**:语音数据需要提供时长 :white_check_mark: **文件消息**:消息内容为文件的URL地址、大小、格式等信息,格式不限,最大支持100M :white_check_mark: **短视频消息**:消息内容为视频文件的 URL 地址、时长、大小、格式等信息,最大支持100M :white_check_mark: **系统通知消息**:包含系统通知消息(例如好友申请通知、群聊邀请通知等) :white_check_mark: **群 Tips 消息**:系统性通知消息,例如有成员进出群组,群的描述信息被修改,群成员的资料发生变化等 :white_large_square:**地理位置消息**:消息内容为地理位置标题、经度、纬度信息 ### 消息功能 :white_check_mark: **离线消息**:用户离线后,将用户未读取的消息存储到离线仓库,待用户上线时自动拉取 :white_check_mark: **多端同步**:多终端在线时消息同步,可同时收到消息 :white_check_mark: **历史消息**:支持本地历史消息和云端历史消息 :white_check_mark: **消息撤回**:撤回投递成功的消息,默认撤回 2 分钟内的消息。撤回操作仅支持单聊和群聊消息 :white_check_mark: **消息已读**:告知发送方,此消息已读 :white_check_mark: **已读回执**:查看点对点会话中对方的已读未读状态 :white_check_mark: **@功能**:群内 @ 消息与普通消息没有本质区别,仅是在被 @ 的人在收到消息时,需要在 UI 上做特殊处理正在输入 :white_large_square: **漫游消息**:在新设备登录时,将服务器记录(云端)的历史消息存储进行同步,默认保存7天 :white_large_square: **正在输入**:可以通过在线消息实现 :white_large_square: **离线推送**:用户不在线时收到消息通过邮箱进行通知 :white_large_square: **消息删除**:使用消息的 remove 方法可以在本地删除消息 ### 资料功能 :white_check_mark: **设置用户资料**:用户设置自己的昵称、验证方式、头像、性别、年龄、签名、位置等资料 :white_check_mark: **获取用户资料**:用户查看自己、好友及陌生人资料 :white_check_mark: **按字段获取用户资料**:按照特定字段获取用户资料 ### 关系链功能 :white_check_mark: **查找好友**:可通过用户账号 ID 查找好友 :white_check_mark: **申请添加好友**:要选择默认是否需要申请理由,目前是默认不需要 :white_check_mark: **添加好友**:发送添加好友请求 :white_check_mark: **更新好友**:更新同一用户的好友的关系链数据 :white_check_mark: **删除好友**:成为好友后可以删除好友(单向删除) :white_check_mark: **获取所有好友**:获取所有好友,默认只拉取基本资料 :white_check_mark: **同意/拒绝好友**:收到请求加好友请求的系统通知后,可以通过或者拒绝 :white_check_mark: **好友备注**:成为好友后可以给好友备注 :white_check_mark: **好友状态**:实时更新好友在线设备状态 :white_large_square: **添加到黑名单**:把任意用户拉黑,如果此前是好友关系会解除好友关系 :white_large_square: **移出黑名单**:把用户从黑名单中移除 :white_large_square: **获取黑名单列表**:拉取用户黑名单列表 :white_large_square: **创建好友分组**:创建分组时,可以同时指定添加的用户,同一用户可以添加到多个分组 :white_large_square: **删除好友分组**:删除好友分组 :white_large_square: **添加好友到好友分组**:将好友添加到好友分组 :white_large_square: **将好友从分组中删除**:将好友从好友分组中删除 :white_large_square: **重命名好友分组**:重命名好友分组 :white_large_square: **获取指定好友分组信息**:获取指定好友分组信息 :white_large_square: **好友资料变更通知**:好友资料变更可以收到系统通知 ### 群组功能 :white_check_mark: **创建群聊** :white_check_mark: **邀请入群** :white_check_mark: **同意/拒绝邀请** :white_check_mark: **群资料修改** :white_check_mark: **成员列表** :white_check_mark: **解散群聊** :white_check_mark: **移出成员** :white_check_mark: **历史消息存储** :white_check_mark: **群成员在线状态实时更新** ### (敬请期待)IM控制台 ### (敬请期待)数据统计 ### (敬请期待)实时监控 ### (敬请期待)云端审核 ## 安装教程 1. 执行 doc 文件夹下的 sql 2. 配置 application.yml 3. 启动 Redis 和 RabbitMQ 4. 启动 im-server(消息推送系统) 5. 启动 im-platform(平台系统) 6. 启动 im-storage(仓储系统) ## 参与贡献 1. Fork 本仓库 2. 提交代码到 develop 分支,请在本地解决与 master 分支的冲突 3. 新建 Pull Request