一套自己部署的 IM,客户端是同一份 Flutter

CaoIM 是我做的一套即时通讯,给想自己部署聊天的人用。服务端是 Java,客户端是 Flutter。Android、iOS、Windows、macOS 和 Web 共用一份客户端代码。

客户端长什么样

桌面端打开是三栏。左边会话,中间聊天,看群的时候右边是资料。手机端是底部三个页签:消息、通讯录、我的。浏览器里也是这套界面,不是单独再写一个网页版。

能发的内容包括文字、表情、图片、拍照、语音、文件和短视频。消息可以引用、转发、撤回和收藏。会话支持置顶、免打扰和未读数,停在某个聊天里时,这个会话不再继续加未读。

通讯录里可以处理好友申请、改备注、拉黑,也可以搜索用户,或者扫码加好友、扫码进群。群资料里有名称、公告、管理员、禁言、入群验证和群昵称。成员头像会拼在一起。

私聊右上角可以发起语音或视频,目前只做一对一。有呼叫铃声,视频可以本地预览、切换摄像头。群通话没有做。示例里只配了公共 STUN,局域网通常没问题,公网很多时候要自己加 TURN。

也支持深色模式。应用在后台时,可以弹出新消息通知。

服务端各管一段

仓库是拆开的,方便单独看:

  • im-server:好友、群、历史消息、已读、离线同步、WebSocket,还有一对一通话信令。端口 8080
  • app-server:注册、登录、资料、文件上传。端口 8081
  • im-admin:运营后台,Vue 3。可以启停用户、解散群、检索消息、管敏感词和权限
  • push-server:可选。对方不在线时发系统通知
  • im-sdk-flutter:长连接、本地库、会话和信令,不画界面
  • flutter-demo:上面说的那个客户端

文本走长连接。图片和文件先上传到 app-server,消息里只留地址。存储可以是本地目录,也可以是 S3 兼容的对象存储。

登录成功会拿到两把令牌。token 用来访问 app-server,imToken 用来连接 im-server。后台通过内部令牌调用消息服务的管理接口,不直接改业务表。

对方在线就立刻推送,不在线就等上线拉取。已读会回给发送方,群里看到的是已读人数。

怎么运行

JDK 17、Maven 3.6、MySQL 5.7(utf8mb4)。Flutter 3,Dart 3.11 及以上。后台页面需要 Node.js 18。

bash 复制代码
mysql -u root -p < im-server/sql/schema.sql
mysql -u root -p < app-server/sql/schema.sql

cd im-server && mvn clean install -DskipTests
cd im-server/im-boot && mvn spring-boot:run
cd app-server && mvn spring-boot:run
cd flutter-demo && flutter pub get && flutter run

Windows PowerShell 里不要用 &&,进目录分开执行。

默认管理端账号是 admin / admin123,页面在 http://localhost:5173。上线后要改掉这个密码,也要换 JWT 密钥。手机调试时,服务器地址写成电脑的局域网 IP,localhost 在手机上指的是手机自己。

语音转文字、群通话、支付和小程序都不在当前代码里。一对一通话的媒体不经过服务器,服务器只转发信令。

代码在 GitHub、Gitee 的 cao-im 组织:

其余仓库从 README 的表格可以点过去。学习和个人使用免费,不用另外联系。商用也不收费,但需要先取得授权。

相关推荐
蜗牛攻城狮4 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
学长毕设5 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
她说可以呀5 小时前
Vue插槽
前端·javascript·vue.js
qq_448011166 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan6 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352906 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
努力的小雨7 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
志尊宝7 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing038 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript