162 lines
7.8 KiB
Markdown
162 lines
7.8 KiB
Markdown
|
||
### **盒子IM**
|
||

|
||
[](https://gitee.com/bluexsx/box-im)
|
||
[](https://github.com/bluexsx/box-im)
|
||
<a href="#加入交流群"><img src="https://img.shields.io/badge/QQ交流群-green.svg?style=plasticr"></a>
|
||
|
||
1. 盒子IM是一个仿微信实现的网页版聊天软件,不依赖任何第三方收费组件。
|
||
1. 支持私聊、群聊、离线消息、发送语音、图片、文件、已读未读、群@等功能
|
||
1. 支持音视频通话(基于原生webrtc实现,需要ssl证书)
|
||
1. uniapp端兼容app、h5、微信小程序,可与web端同时在线,并保持消息同步
|
||
1. 后端采用springboot+netty实现,网页端使用vue,移动端使用uniapp
|
||
1. 服务器支持集群化部署,具有良好的横向扩展能力
|
||
|
||
|
||
详细文档:https://www.yuque.com/u1475064/mufu2a
|
||
官方论坛: https://bbs.boxim.online
|
||
|
||
#### 近期更新
|
||
发布3.0版本:
|
||
|
||
- 后台管理端上线,后台管理代码仓库地址:https://gitee.com/bluexsx/box-im-admin
|
||
- 框架和组件版本全面升级: jdk17、springboot3.3、node18等
|
||
- 部分界面,功能、性能优化
|
||
|
||
|
||
#### 在线体验
|
||
|
||
网页端:https://www.boxim.online
|
||
|
||
移动安卓端:已上架至各大主流手机应用市场以及腾讯应用宝,搜索"盒子IM",下载安装即可
|
||
|
||
移动ios端: 已上架至app store,搜索"盒子IM",下载安装即可
|
||
|
||
小程序段: 已上架至微信小程序,搜索“盒子IM”进入即可
|
||
|
||
移动H5端: https://www.boxim.online/h5/ ,或扫码:
|
||
|
||

|
||
|
||
测试账号:张三/Aa123123 李四/Aa123123,也可以自行注册
|
||
|
||
说明:
|
||
1.**请勿利用测试账号辱骂他人、发布低俗内容,否则将直接对您的IP进行封禁**
|
||
2.由于部分厂商上架审核要求实名制,app端隐藏了"用户名注册"注册通道,可通过长按注册页面蓝色文字标题解除限制
|
||
3.由于微信小程序每次发布审核过于严苛和繁琐,暂时不再提供体验环境,但uniapp端依然会继续兼容小程序
|
||
4.体验环境部署的是商业版本,与开源版本功能存在一定差异,具体请参考:
|
||
https://www.yuque.com/u1475064/imk5n2/qtezcg32q1d0dr29#SbvXq
|
||
|
||
|
||
#### 付费服务
|
||
商业版源码: https://www.yuque.com/u1475064/imk5n2/qtezcg32q1d0dr29
|
||
远程协助: https://www.yuque.com/u1475064/imk5n2/fettd57rvzc29s5r
|
||
环境搭建: https://www.yuque.com/u1475064/imk5n2/qgq5cvgmavallqnl
|
||
|
||
|
||
#### 项目结构
|
||
| 模块 | 功能 |
|
||
|-------------|----------------------------------|
|
||
| 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
|
||
|
||
|
||
#### 文件存储:MinIO 与阿里云 OSS
|
||
|
||
`im-platform/src/main/resources/application-dev.yml` 和 `application-prod.yml` 分别保留原 `minio` 配置,并新增独立的 `oss` 配置。`oss.enabled: true` 时使用阿里云原生 SDK 上传;设为 `false` 或没有 `oss` 节点时使用原 MinIO。修改配置后需要重新部署或重启 im-platform。
|
||
|
||
阿里云的 `endpoint` 填 Bucket 所在地域的服务端节点,`domain` 填 Bucket 公网域名或绑定的 CDN 域名,`bucketName` 填桶名;`accessKey`、`secretKey` 填对应阿里云凭据。OSS 地址格式为 `domain/对象路径`,不会额外拼接 Bucket;MinIO 保留 `domain/bucketName/对象路径` 格式。当前独立 OSS Bucket 为 `htys-chat`。
|
||
|
||
切换存储只影响新上传,历史 MinIO 文件和消息地址仍然保留,不自动搬迁。重复上传按当前存储匹配文件,避免命中旧 MinIO 记录而跳过 OSS 上传。启用 OSS 时,过期清理按已配置的 OSS/MinIO 域名和目录识别原图归属,使用各自的保留天数;未知地址会跳过,缩略图仍按原规则保留。关闭 OSS 后不清理 OSS 中的历史对象。OSS Bucket 及访问权限由已有配置管理,应用不自动创建桶或更改权限。
|
||
|
||
从项目根目录执行真实图片上传测试(默认读取 dev):
|
||
|
||
```sh
|
||
mvn -pl im-platform -am -Dtest=StorageUploadSmokeTest -Dsurefire.failIfNoSpecifiedTests=false -Doss.upload.test=true test
|
||
```
|
||
|
||
测试自动生成一张小 PNG,通过实际上传代码上传,读回比对内容并匿名检查最终图片地址。测试图片保留在 `image/_upload-test-UUID/` 下,控制台输出其地址;测试不连接数据库或 Redis。可追加 `-Doss.upload.profile=prod` 测试 prod 配置。普通测试不会自动执行真实上传。
|
||
|
||
#### 本地启动
|
||
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
|
||
```
|
||
访问 http://localhost:8080
|
||
|
||
4.启动uniapp-h5
|
||
将im-uniapp目录导入HBuilderX,点击菜单"运行"->"开发环境-h5"
|
||
访问 http://localhost:5173
|
||
|
||
|
||
#### 界面截图
|
||
私聊:
|
||

|
||
|
||
群聊:
|
||

|
||
|
||
群通话(商业版):
|
||

|
||
|
||
好友列表:
|
||

|
||
|
||
群列表:
|
||

|
||
|
||
移动端APP:
|
||

|
||
|
||
|
||

|
||
|
||
#### 加入交流群
|
||
群1: 741174521(已满)
|
||
群2: 937470451(已满)
|
||
群3: 1012017031(已满)
|
||
群4: 765849133
|
||
|
||
欢迎进群与小伙们一起交流, **申请加群前请务必先star哦**
|
||
|
||
|
||
#### 点下star吧
|
||
如果项目对您有帮助,请点亮右上方的star,支持一下作者吧!
|
||
|
||
|
||
#### 说明几点
|
||
|
||
1. 本系统允许用于商业用途,且不收费,**但切记不要用于任何非法用途** ,本软件作者不会为此承担任何责任
|
||
1. 基于本系统二次开发后再次开源的项目,请注明引用出处,以避免引发不必要的误会
|
||
1. 为方便管理,要pr的同学请将代码提交到v_3.0.0分支,作者会在功能上线时合并到master分支
|
||
1. 允许商用不代表可以随意倒卖开源代码,尤其是代码、名字、截图一点都不改就拿去卖钱的,我劝你们善良一点!
|
||
|