简介
子IM是一个仿微信的聊天工具。后端采用springboot+netty
实现,web端使用vue
,移动端使用uniapp
,支持私聊、群聊、离线消息、发送图片、文件、语音、emoji表情、视频聊天
等功能。
项目结构
模块 | 功能 |
---|---|
im-platform | 业务平台服务,负责处理来自用户的业务请求(http) |
im-server | 消息推送服务,不依赖业务,负责将消息推送给用户(ws) |
im-client | 消息推送sdk,其他服务可集成此sdk与im-server通信 |
im-common | 公共包,后端服务均依赖此包 |
im-web | web页面 |
im-uniapp | uniapp页面,可打包成app、h5、微信小程序 |
消息推送方案
-
当消息的发送者和接收者连的不是同一个server时,消息是无法直接推送的,所以我们需要设计出能够支持跨节点推送的方案
-
利用了
redis
的list数据实现消息推送,其中key为im:unread:${serverid}
,每个key的数据可以看做一个queue,每个im-server
根据自身的id只消费属于自己的queue -
redis
记录了每个用户的websocket
连接的是哪个im-server
,当用户发送消息时,im-platform
将根据所连接的im-server
的id,决定将消息推向哪个queue
界面截图
私聊
群聊
群通话
好友列表
群列表
移动端APP