# echo-im **Repository Path**: gaoziman/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)系统

## 介绍 **项目简介** :一个仿微信实现的网页版聊天软件。支持好友、私聊、群聊、离线消息、发送语音、图片、文件、emoji表情、回执消息、视 频聊天等功能。严格遵循IM系统的四大原则:实时性、幂等性、不丢失、时序性。 **消息处理流** :用户通过 HTTP 请求将消息发送到 im-platform,平台负责进行权限校验、数据脱敏和异步存储等工作,并为消息添加元 数据,根据这些元数据,im-client 执行相应处理,并将消息发布到 RabbitMQ。消息按照路由规则到达 im-server,最终通过 WebSocket 实时推送给前端用户。 **主要技术栈** :SpringBoot、MyBatis、SpringSecurity、Netty、MySQL、Redis、RabbitMQ、OAuth2.0、WebSocket、Sa-Token、 Redission、Minio **详细文档** :https://gitee.com/brother-one/echo-im/tree/master/doc/md ## 亮点 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,确保系统的高可用性和安全性 ## 系统架构(详见本项目 doc 文件夹) ![输入图片说明](doc/image/echoim%E6%9E%B6%E6%9E%84%E5%9B%BE%20(1).png) ## 安装教程 1. 执行 doc 文件夹下的 sql 2. 配置 application.yml ## 参与贡献 1. Fork 本仓库 2. 提交代码到 develop 分支,请在本地解决与 master 分支的冲突 3. 新建 Pull Request