- 仿微信实现的网页版聊天软件,不依赖任何第三方收费组件。
- 支持私聊、群聊、离线消息、发送语音、图片、文件、已读未读、群@等功能
- 支持单人、多人音视频通话(基于原生webrtc实现,需要ssl证书)
- uniapp端兼容app、h5、微信小程序,可与web端同时在线,并保持消息同步
- 后端采用springboot+netty实现,网页端使用vue,移动端使用uniapp
- 服务器支持集群化部署,具有良好的横向扩展能力
近期更新
发布3.0版本:
- 后台管理端上线
- 框架和组件版本全面升级: jdk17、springboot3.3、node18等
- 部分界面,功能、性能优化1
在线体验
账号:张三/123456 李四/123456,也可以在自行注册账号
说明:
1.由于微信小程序每次发布审核过于严苛和繁琐,暂时不再提供体验环境,但uniapp端依然会继续兼容小程序
2.体验环境部署的是商业版本,与开源版本功能存在一定差异
项目结构
模块 | 功能 |
---|---|
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
本地启动
1.安装运行环境
- 安装node:v18.19.0
- 安装jdk:17
- 安装maven:3.9.6
- 安装mysql:8.0,账号密码分别为root/root,创建名为im_platform的数据库,运行db/im_platfrom.sql脚本
- 安装redis:6.2
- 安装minio:RELEASE.2024-xx,使用默认账号、密码、端口
2.启动后端服务
mvn clean package
java -jar ./im-platform/target/im-platform.jar
java -jar ./im-server/target/im-server.jar
3.启动前端web
cd im-web
npm install
npm run serve
4.启动uniapp-h5 将im-uniapp目录导入HBuilderX,点击菜单"运行"->"开发环境-h5" 访问 http://localhost:5173
接入消息推送
对消息推送模块进行了剥离和封装, 如果您不关心盒子IM的业务功能,只需要一个可以将消息推送至前端的服务,则只需要启动im-server即可
界面截图
私聊:
群聊:
群通话:
好友列表:
群列表:
移动端APP: