小方工作室第三款产品:开源企业 IM「FlamingoIM」全面介绍
原创
张小方
张小方
CppGuide
2026年10月12日 14:11
上海
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
开源 · 企业即时通讯 · C++
FlamingoIM
一套从网络库到界面控件,全部用 C++ 自研的开源企业即时通讯系统

Markdown 编辑器:左边写,右边实时预览
群协作,以及「帖子群」
群聊里有 @提醒、群文件、群公告(包括新成员必须先读的「入群必读」)、群备忘、群问答和接龙;邀请入群、加群链接、入群审批、禁言、管理员与群权限设置、转让群主也都齐全。
群聊窗口,右侧是成员与群资料边栏
帖子群是一种特别的群:没有聊天流,只有帖子。适合发通知、收集意见、做专题讨论——发帖人可以追加补充,其他人可以两级留言、点表情回应,重要的内容不会被聊天消息冲走。
帖子群:左边是帖子列表,右边是帖子详情与留言
音视频、远程桌面与屏幕共享
一对一语音视频、群语音视频、远程桌面都内置在客户端里,不需要另装会议软件。
群语音通话
屏幕共享做得比较完整:参与的人可以在画面上标注、开白板,可以申请控制共享者的键盘鼠标;其他人也可以申请共享自己的屏幕,由主持人审批;还能设置密码、生成分享链接。屏幕录制支持本地录制,也支持服务器端的云端录像。
屏幕共享:左上角的 P2P 标记表示画面走的是点对点直连
语音字幕与文字识别,都在本机完成
录屏和屏幕共享时可以打开实时字幕,中英文混合识别、自动加标点;录完之后在字幕编辑器里逐句校对,再导出为烧录字幕的 MP4、带字幕轨的 MP4 或 SRT 文件。识别全部在本机离线完成,会议内容不会被发到任何云服务。
字幕编辑器:左边预览录像,右边逐句校对字幕
截图支持全局快捷键(默认 Alt+Z),截完可以直接标注、发送;截图和聊天里的图片都能一键识别出文字,使用的是 Windows 自带的识别引擎。
截图后直接标注,工具栏里有「识别文字」
文件:从发文件到共享整个磁盘
发文件、发整个文件夹都可以,服务器上已有的文件再次发送会秒传。更进一步,可以把本机的磁盘、文件夹或文件共享到会话里,成员像逛资源管理器一样浏览、下载、上传;有人下载、上传或改动文件时,分享者会收到右下角的提醒。
浏览同事共享出来的文件夹
聊天记录管理器
跨会话搜索、按时间轴浏览、单独的文件库和图片库,本机存储占用多少一目了然,聊天记录还能导出备份。
聊天记录管理器
五种界面语言
界面支持简体中文、繁體中文、English、日本語、한국어 五种语言,在登录窗右下角或「系统设置 → 通用 → 语言」里切换,重启后生效,也可以设成跟随 Windows 的显示语言。切换语言时,界面字体也会换成更适合这种语言的字体;通话、屏幕共享、文件共享这些插件窗口和升级程序,同样都翻译好了。
还有一个细节:群里的系统提示(比如谁退出了群聊、群主转让给了谁)是由每个人的客户端按自己的界面语言生成的。同一个群里,用中文界面的同事看到中文,用英文界面的同事看到英文。
左上是登录窗里的语言菜单,其余是同一个「关于」窗口的五种语言版本
还有这些
◆ 换上自己公司的名字 窗口标题栏里的产品名可以改成自己公司的名字:主面板和各个窗口、提示框的标题,登录窗的品牌大字,「关于」「退出」里的名称都会跟着变,标语和版权文字也能一起换。只要改一个配置文件,不用改代码,也不用重新编译。
◆ 机器人 个人机器人可以在你忙的时候替你自动回复;群机器人按关键词规则回复,也能接收外部系统的推送。
◆ 密聊 端到端加密,消息只保存在内存里、不写入本地数据库,聊天窗口禁止被截屏。
◆ 备忘与提醒 聊天消息可以一键存为备忘,到点弹出提醒。
◆ 锁屏 离开座位时设一个临时密码锁住屏幕,有五种锁屏动画,开头那只火烈鸟就是其中之一。
◆ 自动升级 管理员在控制台发布新版本后,客户端自动提示、下载并安装。
管理控制台
控制台分两种管理员。企业管理员负责本企业:仪表板、组织架构与员工、服务号、在线用户、功能开关、敏感词、文件共享管理与审计、企业问答、企业机器人、审计日志。平台超级管理员负责整个平台:新增、审核、停用企业,发布平台公告和客户端新版本。
管理控制台:按企业打开或关闭各项功能
PART 04
架构与技术
ARCHITECTURE
服务端由三个独立的服务组成,各管一摊:chatserver 负责登录、消息和各类信令,同时给管理控制台提供 HTTP 接口;fileserver 负责聊天文件、升级包,以及文件夹传输和文件共享的中转;imgserver 负责图片,以及音视频、远程桌面、屏幕共享的中转和 P2P 地址探测。
总体服务架构(点开大图查看端口与模块细节)
◆ 网络框架 Muduo 风格的多 Reactor 模型,Linux 用 epoll,Windows 用 select;三个服务共用这套框架,它也可以单独拿来写别的服务。
◆ 通信协议 二进制帧头加 JSON 包体,包体较大时用 zlib 压缩;连接建立后先用 X25519 交换密钥,之后每一帧都用 XChaCha20-Poly1305 加密(libsodium)。
◆ 数据库 MySQL 与 SQLite 两种后端,同一份程序靠配置项切换,首次启动自动建库建表。
◆ 机器人引擎 运行在独立线程上,支持规则回复、Webhook 和调用外部 HTTPS 服务,不占用处理客户端连接的线程。
PC 客户端采用「主程序 + 插件」的结构:音视频、文件共享、密聊、帖子群、截图、文字识别、语音字幕、锁屏等功能各在一个 DLL 里,分启动时、首次登录后、首次使用时三批加载。某个 DLL 缺失或加载失败,只会隐藏对应功能的入口,其余功能照常使用。
PC 客户端模块架构:主程序与 13 个插件 DLL
PART 05
测试与文档
QUALITY
1300+
服务端单元测试用例(doctest)
5000+
客户端单元测试用例(Catch2)
70+
协议与功能设计文档
44 章
图文使用帮助
仓库的 docs 目录下有七十多份协议与功能设计文档,记录了每个方案的考虑与取舍;使用帮助分员工、企业管理员、平台管理员三类读者,配有大量截图。对想读源码的人来说,这些文档能省下很多摸索的时间。
PART 06
适合谁,怎么上手
GET STARTED
◆ 想自建内部通讯工具的团队 数据放在自己的服务器上,默认用 SQLite,几条命令就能跑起来;窗口标题栏还能换成自己公司的名字。
◆ 学习 C++ 服务器开发的同学 从多 Reactor 网络库、协议设计、数据库线程池,一路读到具体的业务代码。
◆ 学习 Windows 客户端开发的同学 自绘控件库、插件化架构、音视频采集与屏幕共享,都有完整的实现可以参考。
服务端在 Linux 或 WSL 上编译、启动,只需要下面几条命令(默认使用 SQLite,不用装数据库):
编译服务端
cd flamingoserver
cmake -S . -B build-linux -DCMAKE\_BUILD\_TYPE=Release -DWITH\_MYSQL=OFF
make -C build-linux -j$(nproc)
启动三个服务(-d 表示以守护进程运行)
./build-linux/fileserver -d
./build-linux/imgserver -d
./build-linux/chatserver -d
chatserver 第一次启动时会自动建库建表,并创建一个默认企业和一个平台超级管理员。客户端用 Visual Studio 2022 打开 flamingoclient/FlamingoClient.sln 编译即可,员工可以在注册窗口按公司名自助注册。详细步骤见仓库的 README。
源码地址
https://github.com/balloonwj/flamingo
https://gitee.com/balloonwj/flamingo
在 GitHub 搜索 flamingo 或复制上面的地址即可访问。欢迎 Star、提 Issue,也欢迎把它用到你的团队里。
技术交流:加微信 easy\_coder(备注 flamingo)邀请进群,或加 QQ 群 729995516。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论