前言
在如今这个信息高速流转的时代,即时通讯已经成了我们工作和生活中不可或缺的一部分。从最初的QQ、MSN,到后来的微信、钉钉,再到如今各种定制化的IM系统,沟通的方式越来越高效,功能也越来越丰富。
最近,在找一个轻量、灵活、可二次开发的开源聊天工具时,发现了"盒子IM"这个项目。它不仅界面清爽、功能完整,更重要的是,它完全不依赖第三方收费组件,后端采用SpringBoot + Netty,前端覆盖Web和移动端,非常适合想要自己搭建聊天系统的开发者。
项目介绍
盒子IM,顾名思义,是一个功能齐全的"聊天盒子"。它是一个仿微信设计的网页版即时通讯系统,支持私聊、群聊、文件传输、语音消息、图片发送、已读未读状态、群内@等功能,几乎涵盖了日常沟通所需的所有基础能力。
更值得一提的是,它还支持单人和多人音视频通话,基于原生WebRTC实现,真正做到了"开箱即用"。
项目采用前后端分离架构,后端由SpringBoot + Netty构建,前端Web端使用Vue,移动端则基于Uniapp开发,实现了跨平台兼容,支持App、H5、微信小程序,并且多个终端可以同时在线,消息实时同步,体验非常流畅。
项目功能
盒子IM的功能设计非常贴近实际使用场景。
核心功能包括:
- 私聊与群聊:支持一对一聊天和多人群组对话,群聊中可以@成员、查看群成员列表。
- 消息类型丰富:除了文字,还支持发送图片、文件、语音消息、Emoji表情等。
- 离线消息:用户离线期间的消息会被妥善保存,上线后自动同步,确保不会错过重要信息。
- 已读未读:消息支持已读回执,方便确认对方是否查看。
- 音视频通话:支持单人和多人音视频通话,基于WebRTC技术,只需配置SSL证书即可启用。
- 多端同步:Uniapp开发的移动端支持App、H5和小程序,与Web端消息互通,无缝切换。
项目特点
盒子IM有几个非常突出的特点。
首先是"轻量且独立",不依赖任何第三方收费SDK,所有核心功能均由自研实现,部署成本低。
其次是"可扩展性强",服务器支持集群化部署,通过Redis实现跨节点消息推送,具备良好的横向扩展能力,适合中大型应用。
最后是"开发友好",项目结构清晰,文档齐全,无论是想直接使用,还是进行二次开发,门槛都不高。
项目结构
| 模块 | 功能说明 |
|---|---|
| im-platform | 业务平台服务,处理用户HTTP请求(如登录、好友、群组等) |
| im-server | 消息推送服务,基于Netty,通过WebSocket向用户推送消息 |
| im-client | 消息推送SDK,供其他业务系统集成,用于发送消息 |
| im-common | 公共依赖模块,包含通用工具、常量、实体类等 |
| im-web | Web前端页面,基于Vue开发 |
| im-uniapp | 移动端,使用Uniapp开发,支持打包为App、H5、微信小程序 |
消息推送方案(跨节点设计)
当发送方和接收方连接在不同的 im-server 实例时,无法直接推送。
为此,盒子IM采用基于 Redis List 的消息队列机制实现跨节点通信:
1、Redis 中为每个 im-server 创建一个队列,键名为:im:unread:${serverId}。
2、每个 im-server 实例只消费属于自己的队列消息。
3、Redis 记录每个用户当前连接的 im-server 实例ID。
4、用户发送消息时,im-platform 根据接收方所连的 im-server ID,将消息写入对应实例的 Redis 队列中。
5、目标 im-server 消费队列,将消息推送给接收方。
该设计实现了服务解耦与横向扩展,支持集群部署。
项目使用
1、环境准备
Node.js: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-webnpm installnpm run serve
4、启动Uniapp H5端
1、将 im-uniapp 目录导入 HBuilderX。
2、点击菜单栏:【运行】→【运行到浏览器】→【Chrome】或【H5标准浏览器】。
3、默认访问地址:http://localhost:5173
接入独立消息推送服务
若您仅需使用消息推送能力(不关心聊天业务),可单独部署 im-server,并通过 im-client SDK 集成,参考文档:www.yuque.com/u1475064/mu…
项目技术
技术栈方面,盒子IM采用了当前主流且稳定的技术组合。
后端使用SpringBoot 3.3 + JDK 17,消息服务基于Netty构建,保证了高并发下的稳定性和性能。
数据存储使用MySQL 8.0和Redis 6.2,文件存储则通过MinIO实现。
前端Web端基于Vue,移动端使用Uniapp,实现了"一次开发,多端运行"。
消息推送通过Redis的List结构实现队列机制,确保跨服务实例的消息可靠传递。
项目体验
网页端:www.boxim.online
移动安卓端:www.boxim.online/download/bo…
移动ios端: 已上架至app store,搜索"盒子IM",下载安装即可
移动H5端: www.boxim.online/h5/ ,或扫码:
项目效果
界面设计简洁,操作逻辑和微信高度相似,几乎没有学习成本。音视频通话功能清晰稳定,群聊消息同步及时,文件上传下载速度快。特别是在多端同时登录时,消息同步几乎没有延迟,体验非常棒。
对于想要快速搭建一个内部沟通工具或作为产品基础模块的团队来说,盒子IM是一个非常靠谱的选择。
系统后台
系统主页
私聊
群聊
群通话
项目源码
Gitee:gitee.com/bluexsx/box…
总结
总的来说,盒子IM是一个功能完整、架构清晰、易于部署和扩展的开源即时通讯项目。它不仅实现了类似微信的核心功能,还在技术选型和系统设计上展现了很高的成熟度。无论是大家想学习IM系统的实现原理,还是需要一个可商用的聊天工具基础,盒子IM都值得一试。
关键词
盒子IM、SpringBoot、Netty、Vue、Uniapp、音视频通话、离线消息、多端同步、开源、即时通讯
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!