# ronan-im **Repository Path**: ysk_code/ronan-im ## Basic Information - **Project Name**: ronan-im - **Description**: 消息推送 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 2 - **Created**: 2021-03-25 - **Last Updated**: 2022-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mirage-im ## 项目介绍 `ronan-im`是基于Spring、Netty实现的长连接服务,通讯协议采取的是TCP 数据包序列化采取的是Protobuf. ## 组织结构 ```xml mirage-im ├─ mirage-im-client # 测试客户端 │ ├─ mirage-im-client.iml │ ├─ pom.xml │ └─ src ├─ mirage-im-common # 公共包 │ ├─ mirage-im-common.iml │ ├─ pom.xml │ └─ src ├─ mirage-im-eureka-server # 注册中心 │ ├─ mirage-im-eureka-server.iml │ ├─ pom.xml │ └─ src ├─ mirage-im-server # 长连接服务器 │ ├─ mirage-im-server.iml │ ├─ pom.xml │ └─ src ├─ mirage-im-web # 配合长连接服务器的业务服务器 │ ├─ mirage-im-web.iml │ ├─ pom.xml │ └─ src ├─ mirage-im.iml └─ pom.xml ``` ## 技术选型 | 技术 | 名称 | 描述 | | ----------- | ----------- | ------------------------------------------------------------ | | SpringCloud | SpringCloud | 微服务分布式框架 | | SpringBoot | SpringBoot | Spring的具体应用 | | Netty | Netty | 提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序 | | Redis | Redis | 非关系型数据库,保存用户登录状态 | | Mongodb | Mongodb | 非关系型数据库,主要是用来保存消息数据 | | Mysql | Mysql | 关系型数据库,用来保存业务数据 | | Kafka | Kafka | *Kafka*是一种高吞吐量的分布式发布订阅消息系统,用来消息持久化处进行解耦 | | Eureka | Eureka | 服务注册中心 | | Hystrix | Hystrix | 服务熔断 | | Feign | Feign | 服务间声明式调用| | Protobuf | Protobuf | 数据序列化 | | Maven | Maven | 项目构建管理 | ## 架构设计 ![mirage-im架构设计](http://assets.processon.com/chart_image/604080ca6376893122da3168.png) ![服务建立流程](http://assets.processon.com/chart_image/605025447d9c087fe257264a.png) 思路: 思路: 1. 客户端先注册到当前系统(im-web),返回accid,name,token等待数据。 2. 用户注册成功后进行登录,保存登录信息,下发可用的im-server服务器(使用轮询算法)。 3. 用户拿到im-server进行长连接登录,保存登录状态。 4. 长连接建立,游戏数据的上行和下行。 5. 同时,在im-web服务开放了消息推送接口,解决项目中所遇到的消息推送场景。 **登录注册流程** ![image-20210304150235376](https://i.loli.net/2021/03/04/HRA4M2jv7ExsiyQ.png) **消息推送实现** ![消息接收者在线时](https://i.loli.net/2021/03/05/3RJxYLDk786jVFv.png) ![消息接收者不在线时](https://gitee.com/ysk_code/image-bed/raw/master/image/20210324102413.png) ![离线消息上报](https://gitee.com/ysk_code/image-bed/raw/master/image/20210324102130.png) ![离线消息拉取](https://gitee.com/ysk_code/image-bed/raw/master/image/20210324102248.png) ## 模块介绍 - **ronan-im** > 父级模块 - **ronan-im-common** > 公共模块 - **ronan-im-web** > 开放接口服务模块 - **ronan-im-server** > 长连接服务模块 ## 功能实现 - [x] 注册 - [x] 登录 - [x] 心跳 - [x] 消息推送 - [x] 单聊 - [x] 群聊(给服务器其他在线的用户发送消息) - [ ] 消息持久化 - [ ] 历史消息查询 - [ ] 登入事件抄送 - [ ] 登出事件抄送 - [ ] ...