1个信令、2个 message、0处改动:飞享IM 语音转文字的协议扩展与四端实现
不方便外放语音的时候,"转文字"几乎是刚需。飞享IM 的语音消息转文字现已在服务端、Android、iOS、PC 桌面端、Web 端全面上线。这次功能在协议层只做了三件事:枚举末尾追加 1 个子信令 ASR、proto 末尾追加 2 个 message、既有定义 0 处改动,旧版客户端完全无感。本文完整说明这个功能的设计、服务端链路与四端实现,并借此讲清楚飞享IM 服务端"只增不改"的可扩展性。

不方便外放语音的时候,"转文字"几乎是刚需。飞享IM 的语音消息转文字现已在服务端、Android、iOS、PC 桌面端、Web 端全面上线。这次功能在协议层只做了三件事:枚举末尾追加 1 个子信令 ASR、proto 末尾追加 2 个 message、既有定义 0 处改动,旧版客户端完全无感。本文完整说明这个功能的设计、服务端链路与四端实现,并借此讲清楚飞享IM 服务端"只增不改"的可扩展性。

自研二进制协议要扛住"省、可切包、可分类、可加密、可演进"五条约束,这些原则听起来抽象,但落到一个真实跑在生产环境的 IM 服务端里,每一条都能在代码里指认到具体的类和字段。这篇文章以飞享IM(FshareIM)服务端 chat-server-pro 为例,从源码层面拆解这套自研协议是怎么把上述原则一条条实现出来的:10 字节包头怎么切包、Signal/SubSignal 两级命令字怎么分发、心跳和 ACK 怎么关联、AES 加密放在协议的哪个环节、版本位怎么预留,以及 TCP 二进制和 WebSocket JSON 这两条通道是怎么在同一个接入层里协同工作的。
