做IM应用,难在哪?

不是界面,界面好做。难的是消息推送、音视频通话、文件传输这些底层的东西。每一块单独拿出来都是一个坑,全部搞定要花多少时间,没做过的人很难估算。

chat-uniapp 是一个开源的即时通讯客户端,作者利用休息时间花了两个月写出来的。前端用 uniapp,后端用 SpringBoot,代码全开放。

图片

技术选型
 

前端:uniapp(Vue3)

一套代码,同时支持 Android、iOS 和 H5。不用分开维护三套代码,对小团队或个人开发者来说省了很多事。
 

消息推送:uniPush + WebSocket

uniPush 是 uni-app 官方的推送服务,整合了各厂商的推送通道。WebSocket 负责实时通信,两者配合保证消息及时到达。


 

音视频:腾讯 TRTC

实时音视频通话用的是腾讯 TRTC,稳定性有保障,接入也相对简单。


 

文件存储:阿里 OSS

图片、语音、视频、文件统一存阿里 OSS,不用自己搭文件服务器。


 

地图:高德地图

位置分享用高德地图 SDK。


 

后端:SpringBoot

用了 MyBatis-Plus 做数据库操作,Shiro 做权限控制,Sharding-JDBC 做分库分表,整体是偏企业级的架构。

图片

配套仓库

这个项目分了三个仓库:

  • chat-uniapp:移动端客户端(本文介绍的这个)

  • chat-flutter:Flutter 版本的客户端

  • chat-api:后端接口服务

三个仓库配合使用,构成完整的前后端系统。

图片

适合什么场景


 

学习参考

想了解 IM 应用怎么从零搭建,这个项目是个不错的参考。消息推送、音视频、文件上传这些模块都有完整实现,可以直接看代码。


 

二次开发

如果你需要在自己的项目里加聊天功能,可以基于这套代码改。前后端都有,不用从头写。


 

快速验证

想做一个社交类产品验证想法,用这套代码搭个原型,比从零开始快很多。

图片

Gitee:https://gitee.com/lakaola/chat-uniapp

GitHub:https://github.com/lakaola/chat-uniapp

最后说两句

开源项目最怕什么?写完就不管了。

这个项目目前看还在维护,作者还有 Flutter 版本的客户端和完整的后端 API 仓库,说明是认真在做,不是写个 demo 就跑路。

但话说回来,IM 应用是一个需要长期迭代的东西。消息丢失、推送延迟、并发冲突、安全性——这些问题在 demo 阶段不明显,一旦上线面对真实用户,一个比一个头疼。

所以如果你打算拿这套代码做商业项目,有几个建议:

一是仔细审后端代码,尤其是安全相关的部分,Shiro 的配置和接口鉴权逻辑要自己过一遍。二是音视频通话这块依赖 TRTC,有免费额度但商用要付费,成本要想清楚。三是数据库这块用了 Sharding-JDBC 分库分表,说明作者考虑过高并发场景,但具体的分片策略要根据自己的业务来调。

开源不等于免费午餐,但它能帮你省掉从零到一的那段最难的时间。剩下的路,还是得自己走。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐