Files
im_server/docs/IM-现有实现与新需求差异对照总结.md
T
2026-08-11 15:59:57 +08:00

34 KiB
Raw Blame History

IM 现有实现与新需求差异对照总结

对照日期:2026-08-10
新需求来源:IM 产品原型需求文档
详细改造分析:IM 产品需求服务端改造分析报告
对照对象:chat-0.25.3 当前服务端源码

1. 文档目的

本文从“现有服务端已经实现了什么”出发,对照新产品需求逐项给出处理结论:

  • 保留:现有实现已基本满足需求,只补配置或测试;
  • 需修改:现有能力可复用,但协议、数据模型、权限或流程不完整;
  • 新增:现有系统没有对应实现,需要新增模块;
  • 客户端为主:主要是移动端交互,服务端只提供状态、配置或资源;
  • 废弃:现有产品能力或接入方式在新需求中没有对应章节,不再作为新产品能力继续建设。

“新需求无直接章节”的数据库、对象存储、集群、监控等运行基础设施不按产品功能废弃,而标记为“保留基础设施”。真正需要废弃的能力单列在第 5 节。

2. 总体结论

当前系统可以继续作为新产品的即时通讯内核,不需要重写。现有 P2P Topic、群 Topic、Subscription ACL、消息序号、消息广播、回执、文件上传、Push 和 WebRTC 信令均可复用。

新需求与现状的主要关系如下:

新需求章节 功能域 当前覆盖程度 结论
第 1 章 账号、企业码、短信、实名、独立密码 部分覆盖 认证内核保留,产品流程需修改,企业码/实名需新增
第 2 章 会话首页、网络状态、消息操作、系统消息 部分覆盖 会话与连接保留,产品状态和系统通知需修改
第 3 章 单聊、好友状态、回执、媒体和名片 部分覆盖 P2P/回执保留,好友约束和结构化消息需修改
第 4 章 输入、@、语音、文件、收藏、转发 少量覆盖 文件和通用消息可复用,大部分产品语义需新增
第 5 章 通讯录、好友申请、主页、黑名单 少量覆盖 用户搜索可改造,关系状态机需新增
第 6 章 群创建、审批、公告、管理、禁言、群文件 部分覆盖 群和 ACL 保留,群治理业务需新增
第 7 章 收藏、下载、聊天记录搜索 少量覆盖 slf 和文件可复用,授权和索引必须修改
第 8 章 语音/视频通话 部分覆盖 P2P WebRTC 信令保留,通话业务状态需修改
第 9 章 组织、会议、日报、月报、信箱 未覆盖 全部新增业务模块
第 10 章 资料、设置、版本、隐私、青少年模式 少量覆盖 通用资料可改造,其余多数新增或客户端实现
第 11 章 反诈、举报、反馈 未形成业务闭环 插件机制保留,业务模型和处置流程新增

必须优先处理三个基础问题:

  1. 消息发布缺少客户端消息 ID 幂等校验,断线重试可能产生重复消息;
  2. 文件下载只校验登录,没有校验用户对文件关联 Topic/消息的读取权限;
  3. 当前核心表没有 tenant_id,共享数据库部署多个企业前必须完成全链路租户隔离。

3. 现有核心实现与新需求关系

现有实现 源码位置 对应新需求章节 结论 修改说明
basic 用户名/密码认证 server/auth/basic 1.2、1.3、1.4、1.6 需修改 保留认证器,增加协议确认、密码策略、错误次数、锁定、找回密码编排和旧 Token 撤销
HMAC Token 登录 server/auth/token 1.2、1.6;2.2 保留 继续作为登录态;补设备会话、单设备撤销和密码重置后的 Token 失效
电话号码及短信验证器 server/validate/tel 1.4、1.5、1.6、1.7 需修改 保留验证码能力,增加用途隔离、发送频控、retry_after、一次性验证票据和审计
REST 外部认证器 server/auth/rest 1.1、1.2 需修改 可连接企业账号中心;企业码解析仍需新增独立入口,认证后绑定企业上下文
Session/WebSocket 协议分发 server/session.go 2.2;第 3、4、8 章 保留 作为 App 的主实时入口;补幂等、产品策略和结构化错误
Topic 消息顺序、保存和广播 server/topic.go 第 2、3、4、6、7 章 需修改 保留核心循环;持久化前增加好友、黑名单、禁言、青少年和内容风险校验
P2P Topic server/topic.go 3.1-3.12;5.2-5.14 需修改 保留单聊容器;是否允许创建、发送和呼叫改由好友/黑名单/隐私策略控制
Group Topic server/topic.go 6.1-6.28;4.2-4.4 需修改 保留群消息和成员基础;增加审批、公告、二维码、禁言和群文件业务层
Subscription ACL server/store/types/types.go、server/topic.go 3.1-3.8;6.4-6.26 需修改 保留 Join/Read/Write/Admin/Owner;不能用 ACL 代替好友申请、待审批和禁言记录
Presence、输入状态 server/topic.go、server/datamodel.go 2.1;3.1-3.4;4.9 需修改 在线/输入状态可复用;增加隐私控制、节流和过期清理
recv、read 回执 server/topic.go 3.4、3.7 保留 定义客户端状态映射;群聊是否显示具体已读人由产品规则控制
通用 JSON head/content 与 Drafty server/datamodel.go、server/drafty 3.6、3.10-3.12;4.1-4.20 需修改 增加消息类型、schema 版本、字段白名单、引用、@、转发和审核状态,不再允许各端自定义语义
消息删除 server/session.go、server/topic.go 2.4;3.8;4.15 需修改 明确仅自己删除、全员撤回、撤回期限、管理员权限和审计,不直接复用模糊的硬删除语义
slf 自收藏 Topic server/store/types/types.go、server/topic.go 4.16;7.1-7.8 需修改 继续保存收藏消息,同时增加收藏索引、来源、去重、类型筛选和源消息删除策略
文件上传与消息附件关联 server/hdl_files.go、server/store/store.go 3.6、3.10-3.12;4.10-4.20;6.27-6.28;7.3、7.7-7.11 需修改 保留上传;增加附件所有权、病毒扫描、群文件索引、短时下载 URL 和资源级授权
Push Handler server/push.go、server/push 2.1、2.5;4.4;8.1-8.11;9.3-9.4;10.18 需修改 保留 Push;扩展 @、审批、会议、通话和安全通知,增加锁屏内容隐私设置
P2P WebRTC 信令 server/calls.go 8.1-8.11 需修改 保留 Invite/Offer/Answer/ICE/Hang-up;新增 call_id、设备抢答、结束原因、详单和 TURN 指标
Plugin Firehose server/plugins.go 11.1-11.4;2.5 需修改 用于外部内容审核和反诈;增加超时、熔断、失败策略和审核结果落库
User Public/Trusted/Tags server/store/types/types.go 5.1、5.5-5.8;10.1-10.6 需修改 可保存基础展示资料;生日、可见性、实名和组织关系应使用明确字段/业务表
Topic Public/Trusted/Aux/Tags server/store/types/types.go 6.10-6.16 需修改 可保存群基础展示资料;公告、审批、二维码和禁言不能只存任意 JSON
fnd 用户/Topic 查找 server/topic.go 5.1、5.3-5.5 需修改 改成租户内精准 ID/受控搜索;执行隐私策略并防止手机号、用户 ID 枚举
sys 系统 Topic server/store/types/types.go、server/topic.go 2.5;第 9、11 章通知 需修改 作为可信系统消息通道;定义消息类型、模板版本、跳转参数和去重键
MySQL 核心表和 Adapter server/db/mysql 所有服务端需求的存储基础 需修改 schema 118 已建立 im_tenant;仍需为核心表增加 tenant_id,并新增产品表、幂等、搜索索引和文件授权查询
文件系统/S3 媒体后端 server/media/fs、server/media/s3 第 3、4、6、7、11 章附件 保留基础设施 生产使用 S3/兼容对象存储,本地文件系统仅开发;补扫描和私有签名地址

4. 按新需求章节逐项对照

4.1 第 1 章:账号注册、登录与身份安全

新需求章节 新功能 当前实现 是否改 如何修改
1.1 企业码登录 无企业/租户模型 新增 增加企业码解析 API、企业状态、服务地址和认证策略;共享库模式需先加 tenant_id
1.2-1.3 账号密码登录及错误提示 basic + token 已有 需修改 增加协议确认、统一错误码、失败计数、账号锁定、设备登录记录和安全通知
1.4-1.5 短信注册和倒计时 电话验证器已有 需修改 新增注册流程 API;验证码按用途隔离,返回有效期和重发时间,服务端强制限频
1.6 忘记密码 验证器与密码更新能力分散 需修改 建立“发码 → 临时票据 → 重置”状态机;成功后撤销旧 Token
1.7 敏感操作二次验证 无统一业务流程 新增 增加验证挑战、一次性票据、有效期、错误次数和操作绑定
1.8-1.10 实名认证及状态提醒 无 新增 独立实名表、字段加密、审核状态、脱敏查询、审核回调和提醒消息
1.11 四位独立密码 无 新增 保存强哈希、失败锁定和找回流程;禁止写入普通设置 JSON 或明文日志

4.2 第 2 章:消息首页、全局导航与系统通知

新需求章节 新功能 当前实现 是否改 如何修改
2.1 会话列表、摘要、未读数 Subscription/Topic 已有基础 需修改 增加置顶、免打扰、隐藏、草稿和结构化消息摘要;文件助手使用固定系统 Topic
2.2 断网、重连、增量同步 Session 与序号拉取已有 需修改 明确同步游标、重连退避、重复消息幂等和连接状态指标
2.3 快捷菜单 无服务端页面逻辑 客户端为主 服务端只返回能力/权限开关,菜单和关闭交互由客户端实现
2.4 引用、复制、收藏、编辑、转发、撤回、删除、多选、群回执 仅删除、通用消息、回执基础 需修改 增加引用/编辑/转发协议,撤回规则和批量操作校验;复制/多选 UI 在客户端
2.5 新设备登录等系统消息 sys Topic 可用,无完整事件生产 需修改 建立可信系统账号、设备/IP 审计事件、模板、跳转参数和防伪造规则

4.3 第 3 章:单聊会话、会话建立与消息状态

新需求章节 新功能 当前实现 是否改 如何修改
3.1-3.5 好友申请前后单聊状态 P2P Topic 有,无好友状态机 新增/修改 新增好友申请和关系表;申请通过后再开放 Topic Write 与媒体能力
3.4、3.7 发送中、送达、已读、失败 消息序号和 read/recv 已有 需修改 增加客户端消息 ID、稳定状态映射和业务失败原因;拉黑消息不得持久化给对方
3.6 图片/语音/视频进度 文件上传与消息可用 需修改 统一 file_id、消息类型和上传完成确认;进度主要由客户端维护
3.7-3.8 拉黑、删除好友后的发送限制 无关系策略 新增 在建会话、发布、通话、名片和文件入口统一执行关系策略
3.9 键盘收起布局 无服务端职责 客户端为主 服务端无需修改
3.10-3.11 多类型文件/混合消息 通用 JSON + 文件已有 需修改 定义 text/image/voice/video/file 类型和字段校验,禁止任意 URL
3.12 名片消息 无标准类型 新增 增加 contact_card,只传用户 ID 与安全快照,打开时重新检查资料权限

4.4 第 4 章:消息输入、媒体内容与消息操作

新需求章节 新功能 当前实现 是否改 如何修改
4.1 键盘、草稿 无专用服务端草稿 客户端为主 草稿默认本地;如需多端同步,增加每用户每 Topic 的草稿设置
4.2-4.4 @成员、@所有人 无结构化 @语义 新增 消息保存稳定用户 ID;校验群成员和 @所有人权限,生成定向未读与 Push
4.5-4.6 表情面板和表情消息 Drafty 可保存文本 保留/客户端为主 Unicode 表情按文本发送;独立表情包需要资源 ID 和版本,不保存本地路径
4.7-4.12 录音、图片/语音/视频上传与展示 文件和通用消息基础已有 需修改 增加媒体类型、时长/尺寸/缩略图、扫描状态;录音交互和播放进度由客户端实现
4.13-4.14 文件上传和文件卡片 已有上传与附件关联 需修改 补格式/大小策略、所有权、病毒扫描、可预览信息和安全下载
4.15 消息多选批量操作 无服务端批量语义 需修改 客户端选择;服务端逐条鉴权,限制批量数量并返回逐项结果
4.16 批量收藏 slf 可承载 需修改 增加收藏唯一约束、来源索引、类型和批量幂等
4.17-4.19 单选/多目标逐条转发 无标准转发模型 新增 校验每个目标发送权和附件权;限制目标数;每条新消息使用独立幂等 ID
4.20 合并转发 无 新增 创建不可变 merged_forward 快照,限制子项和总大小,清理会话 ID 与敏感字段

4.5 第 5 章:通讯录、好友关系与黑名单

新需求章节 新功能 当前实现 是否改 如何修改
5.1 好友通讯录和企业成员 fnd/Tags 仅提供基础查找 需修改 新增好友关系和组织成员查询;备注优先;支持字母/拼音索引
5.2 新朋友列表与审批 无 新增 新增好友申请状态机、幂等接受/拒绝、过期和系统通知
5.3-5.5 ID、扫码添加好友 基础查找可部分复用 需修改 限定租户内精准搜索;二维码使用签名短 Token;执行隐私和反枚举策略
5.6 好友验证留言 无明确模型 新增 好友申请表保存验证信息、来源、过期时间和风控结果
5.7-5.8 好友/非好友个人主页 Public/Trusted 可显示基础资料 需修改 根据关系、企业和隐私设置返回不同字段,不让客户端自行裁剪敏感资料
5.9-5.10 拉黑开关 无完整黑名单模型 新增 关系表记录单方 block;立即影响消息、搜索、呼叫和资料访问
5.11 删除好友 无好友关系真源 新增 事务更新双方关系;默认保留历史但禁止继续发送,规则需产品确认
5.12-5.14 黑名单列表及提示 无 新增 提供黑名单查询、解除接口和统一业务错误,不向被拉黑人泄露过多信息

4.6 第 6 章:群聊创建、资料维护与成员治理

新需求章节 新功能 当前实现 是否改 如何修改
6.1-6.2 群列表和空状态 Group Topic 已有 需修改 复用订阅列表;增加群业务状态、群头像摘要和已解散处理
6.3-6.6 加群、邀请与审批 ACL 可邀请成员,但无申请状态机 新增/修改 新增入群申请/邀请表;审批通过后才更新 Subscription,写 Outbox 通知
6.7-6.9 群公告和已读 无公告模型 新增 公告主表、版本、发布权限、置顶和成员已读表;变更通过群系统消息通知
6.10-6.16 群设置、资料、头像、昵称、简介、标识、二维码 Public/Aux/Private 可部分承载 需修改 定义可索引字段和修改权限;二维码新增签名 Token、有效期、使用次数和撤销
6.17-6.22 管理员、群主转让 Admin/Owner ACL 已有 需修改 复用权限位;补管理员上限、二次确认、操作审计和可靠通知
6.23-6.24 成员禁言 当前通知静音不等于发言禁用 新增 新增全员/成员禁言规则,在消息持久化前强制执行,定义管理员豁免
6.25-6.26 选择新群主及确认 已有 Owner 转移逻辑 需修改 增加风险校验、幂等、候选人有效性、二次确认和审计
6.27-6.28 群文件及上传 文件消息可用,无群文件目录 新增/修改 建群文件索引,支持类型/时间/上传者查询和管理员删除,复用安全上传链路

4.7 第 7 章:文件下载、收藏管理与聊天记录检索

新需求章节 新功能 当前实现 是否改 如何修改
7.1-7.8 收藏分类、查看和分享 slf Topic 只有基础容器 需修改 增加收藏索引、类型、去重和源消息引用;分享时重新执行附件和目标会话权限
7.9-7.11 文件下载状态 已有 HTTP 下载 必须修改 下载前检查上传者或关联 Topic Read ACL;使用短时签名 URL;进度/完成状态在客户端
7.12 关键词搜索并定位上下文 现有查询只按序号范围 新增 建消息搜索索引,返回 Topic/SeqId 后重新检查 ACL,并支持上下文拉取
7.13-7.16 文件、链接、图片、视频分类检索 无类型索引 新增 建 message_type、mime_group、file/link 字段和游标分页,支持历史回填

4.8 第 8 章:实时语音与视频通话

新需求章节 新功能 当前实现 是否改 如何修改
8.1-8.4 邀请、等待、接听、语音通话 P2P WebRTC 信令已有 需修改 增加独立 call_id、呼叫类型、响铃/接听时间、忙线/拒接/超时原因和通话记录
8.5-8.6 麦克风与扬声器状态 信令可传临时事件 客户端为主 本地媒体控制由客户端负责,仅在对端需要展示时同步状态
8.7-8.10 视频等待、摄像头关闭、视频中 WebRTC Offer/Answer/ICE 已有 需修改 增加视频类型和摄像头状态事件;配置 TURN,监控 ICE 成功率
8.11 通话悬浮状态 无服务端职责 客户端为主 服务端保持呼叫会话和重连状态,悬浮窗由客户端实现

当前实现仅适合一对一通话。新需求没有群音视频章节,因此首期不新增 SFU 或群会议通话。

4.9 第 9 章:企业工作台与办公协同

新需求章节 新功能 当前实现 是否改 如何修改
9.1 工作台入口 无业务模块 新增 新增工作台应用配置和用户可见权限;页面布局由客户端实现
9.2 部门组织架构 无 新增 新建组织单元和成员表,支持树、搜索、主部门、职位、在职状态和数据范围
9.3-9.4 会议通知 仅能发送普通消息 新增 新建会议和参与人模型;创建/变更/取消通过 Outbox 发送系统消息和定时提醒
9.5-9.8 日报及普通/管理员视图 无 新增 建报告表和提交状态机;管理员查询按组织数据权限过滤
9.9-9.11 月报及详情 无 新增 复用报告模型,以类型/周期区分;增加汇总和附件能力
9.12-9.13 总经理信箱 无 新增 建信箱工单、匿名展示、附件、回复和审计;匿名对业务角色隐藏但保留受控追溯

工作台 CRUD 建议走 /v1/im/* HTTP API,状态提醒走系统 Topic,不把报告和组织树直接塞进聊天消息协议。

4.10 第 10 章:个人资料、通用设置、隐私与青少年模式

新需求章节 新功能 当前实现 是否改 如何修改
10.1-10.5 我的、个人信息、昵称、生日、签名 Public/Trusted 有通用字段 需修改 定义资料字段、格式、可见性、敏感词、变更版本和审计;实名信息单独存储
10.6 个人二维码 无标准 Token 新增 生成短时签名 Token,扫码后仍执行租户、隐私和账号状态校验
10.7-10.8 iOS/Android 设置页 无服务端页面逻辑 客户端为主 服务端提供用户设置和能力开关
10.9 清空缓存 不属于服务端数据删除 客户端为主 只清理设备缓存,不删除云端消息;无需服务端接口
10.10-10.11 版本更新 无版本配置服务 新增 提供平台/渠道最低版本、推荐版本、强更开关、下载地址和文案 API
10.12-10.13 隐私设置及添加方式 无统一隐私模型 新增 建隐私设置表,并在搜索、加好友、资料和在线状态接口中强制执行
10.14-10.17 青少年模式 无 新增 服务端保存启用状态、PIN 强哈希、失败锁定和策略版本;所有关键入口强制检查
10.18 推送权限 Push Token 能力已有 需修改/客户端为主 系统授权由客户端申请;服务端保存 Token、开关、免打扰和预览策略
10.19-10.21 提醒、相机、麦克风说明 无服务端职责 客户端为主 权限说明和系统授权由客户端实现,可由配置服务下发版本化文案

4.11 第 11 章:反诈安全、举报与意见反馈

新需求章节 新功能 当前实现 是否改 如何修改
11.1-11.2 反诈一次/二次提示 Plugin 可拦截消息,无产品策略 新增/修改 建风险事件和策略版本;同步硬规则本地执行,外部审核设置超时/熔断;客户端按等级弹窗
11.3-11.4 举报提交和分类 无举报工单 新增 建举报、证据、处理状态和审计;服务端在有权限时固化消息快照与哈希
11.5 意见反馈 无 新增 建反馈工单、分类、附件、联系方式和处理状态;附件复用私有文件授权

5. 新需求未覆盖的现有能力:废弃清单

以下能力在新需求文档中没有对应章节。按新产品范围标注为“废弃”,但应采用“停止新接入 → 观察存量 → 迁移 → 删除”的方式处理,不能在未确认线上使用情况时直接删除源码或数据。

现有能力 源码/配置 新需求章节 处理结论 废弃方式
匿名登录 server/auth/anon 无 废弃 新环境不配置、不向客户端公开;确认无匿名会话后移除注册和文档
邮箱注册/邮箱验证码/邮箱找回 server/validate/email 无,新需求只定义手机号短信 废弃 产品 API 不再暴露 email credential;存量账号先绑定手机号再停用
Channel 只读广播 Topic TopicCatGrp 的 channel 模式 无 废弃 禁止新建 Channel;如有存量,迁移为普通群或公告业务后再移除入口
Long Poll 客户端接入 /v0/channels/lp 无,新移动端按 WebSocket 设计 废弃 先记录调用量并公告;无流量后关闭路由,WebSocket 保留
客户端 gRPC 接入 grpc_listen、客户端 gRPC 服务 无 废弃 App 不再接入;注意保留插件所需的 gRPC 能力,两者不能一起误删
示例 Python Chat Bot tinode.conf 中 python_chat_bot 无 废弃 从生产配置删除;插件框架因第 11 章风控继续保留
静态网页托管 main.go 静态文件路由/配置 无 Web 产品章节 废弃 新产品服务端不托管 Web UI;确认运维页面用途后关闭
stdout Push Handler server/push/stdout 无生产需求 废弃(生产) 仅允许本地测试使用,生产配置删除;FCM/TNPG 等真实 Push 保留
PostgreSQL Adapter server/db/postgres 无数据库兼容要求 废弃(产品版候选) 若确认生产统一 MySQL,则停止产品功能适配和验收;删除前核查部署
MongoDB Adapter server/db/mongodb 无数据库兼容要求 废弃(产品版候选) 同上,不继续为新增 im_* 业务表实现双写逻辑
RethinkDB Adapter server/db/rethinkdb 无数据库兼容要求 废弃(产品版候选) 同上;保留上游代码还是物理删除由仓库维护策略决定

以下能力虽然没有独立的新需求章节,但属于满足新需求所需的技术底座,不废弃:

基础能力 保留原因
me Topic 和设备同步 会话列表、未读数、多端状态需要
fnd 查找 Topic 第 5 章精准用户搜索可在其基础上收紧
sys Topic 第 2、9、11 章的可信系统通知需要
slf Topic 第 4、7 章收藏同步可复用
gRPC Plugin/Firehose 第 11 章内容审核和反诈外部服务需要
FCM/TNPG Push 第 2、4、8、9、10 章离线提醒需要,生产只选择实际使用的 Handler
文件系统/S3 Media Adapter 第 3、4、6、7、11 章附件需要,按环境选择
集群、缓存、监控、TLS 属于可用性和安全基础,不是产品页面功能
root/后台管理能力 实名审核、举报处置、组织管理和审计需要,但必须收紧权限

6. 需要新增的服务端模块

新模块 对应新需求章节 主要职责
imapi 第 1、5、6、7、9、10、11 章 HTTP API、认证中间件、输入校验、统一错误和游标分页
impolicy 3.7-3.8;5.9-5.14;6.23-6.24;10.12-10.17 好友、黑名单、禁言、隐私和青少年同步授权
immessage 2.4;3.6、3.10-3.12;第 4 章 消息类型、schema 校验、@、引用、编辑、转发和摘要
imbiz/relationship 第 5 章 好友申请、联系人、备注、拉黑和删除状态机
imbiz/group 6.3-6.28 群审批、公告、二维码、角色、禁言和群文件
imbiz/identity 1.7-1.10 二次验证、实名认证、审核和脱敏
imbiz/workbench 第 9 章 组织、会议、日报、月报和信箱
imbiz/safety 第 11 章 风险事件、举报证据、处置、反馈和审计
imsearch 7.12-7.16 消息索引、历史回填、检索和 ACL 二次过滤
imnotify 2.5;第 5、6、9、11 章 Outbox 消费、系统消息和 Push 通知
imjobs 1.5;5.2;6.3-6.6;9.3-9.4 申请过期、会议提醒、重试、清理和索引回填

7. 主要数据修改

7.1 核心表必须修改

对象 对应新需求章节 修改内容
Message 2.2、2.4;第 3、4、7 章 增加或关联客户端幂等 ID、类型、审核状态、搜索索引;重复发送返回同一 SeqId
FileDef/File links 第 3、4、6、7、11 章 增加扫描状态、业务用途和访问查询;下载按消息/Topic ACL 授权
User 1.1-1.10;5.1;9.2;第 10 章 共享 SaaS 时加 tenant;基础资料字段规范化,敏感身份数据独立存储
Topic/Subscription 第 2、3、5、6 章 共享 SaaS 时加 tenant;会话个性设置、群策略和关系状态使用独立业务表

7.2 新增业务表

数据域 建议表 对应新需求章节
好友与会话 im_user_relations、im_friend_requests、im_conversation_settings、im_privacy_settings 第 2、3、5 章;10.12-10.13
群治理 im_group_settings、im_group_join_requests、im_group_mutes、im_group_announcements、im_group_announcement_reads、im_group_invite_tokens 第 6 章
消息与收藏 im_message_idempotency、im_message_index、im_favorites 2.2、2.4;第 4、7 章
身份与设置 im_identity_verifications、im_user_settings、im_teen_mode 第 1、10 章
企业办公 im_org_units、im_org_members、im_meetings、im_meeting_participants、im_work_reports、im_mailbox_messages 第 9 章
安全治理 im_reports、im_report_evidence、im_feedback、im_risk_events、im_audit_logs 第 11 章
可靠事件 im_outbox、im_idempotency_keys 第 5、6、9、11 章的审批和通知

共享数据库的多企业模式下,核心表和全部 im_* 表都必须包含 tenant_id,并把租户放入唯一索引、查询条件、缓存键和文件路径。若采用一企一实例/一企一库,则企业码负责服务发现,物理隔离优先。

8. 主要代码修改位置

文件/目录 对应新需求章节 修改内容
server/datamodel.go 第 2、3、4、7、8 章 定义 x-im-schema、消息类型、幂等 ID、引用、转发、搜索和通话扩展
server/session.go 第 2、3、4、5、8、10、11 章 消息幂等、策略调用、租户上下文和统一业务错误
server/topic.go 第 2、3、4、6、7 章 保存前执行好友/黑名单/禁言/青少年/风险规则,发送结构化系统消息
server/calls.go 第 8 章 call_id、设备抢答、标准结束原因、通话记录和指标
server/hdl_files.go 第 3、4、6、7、11 章 抽取 HTTP 认证、资源 ACL、签名下载 URL 和扫描状态检查
server/plugins.go 第 11 章 审核超时、熔断、失败开放/关闭策略和可观测性
server/push.go 2.5;4.4;第 8、9、10、11 章 产品消息类型、@、会议、审批、通话和隐私 Push
server/main.go 第 1、5、6、7、9、10、11 章 注册 /v1/im/* API、业务服务和后台任务;逐步下线废弃路由
server/store 所有服务端章节 新增核心事务、幂等、文件授权、搜索接口;明确产品版支持的数据库
server/db/mysql 所有服务端章节 从当前 schema 118 继续迁移核心 tenant_id、业务表、索引和 MySQL 实现
server/tinode.conf 所有章节 企业、产品模块、搜索、审核、TURN、文件扫描、限流和废弃能力开关

9. 修改优先级

P0:先保证新系统不会产生安全和数据问题

工作 对应新需求章节
确定一企一实例或共享 SaaS 1.1、5.1、9.2
确定产品版只支持 MySQL 还是继续支持多数据库 所有服务端章节的存储基础
消息客户端 ID 幂等 2.2;3.4、3.7;第 4 章
文件下载资源级授权 3.10-3.12;4.13-4.20;6.27-6.28;7.3、7.7-7.11
消息类型、错误码和兼容协议 2.4;第 3、4、7、8 章
停止新客户端使用匿名、Long Poll、Channel 和客户端 gRPC 新需求无对应章节,废弃项

P1:完成即时通讯产品主链路

工作 对应新需求章节
企业码、短信注册/找回、二次验证、实名 第 1 章
好友申请、联系人、隐私、黑名单 第 5 章;3.1-3.8
结构化消息、@、引用、转发、收藏 2.4;第 3、4 章
会话设置和可信系统通知 第 2 章

P2:完成群、文件和搜索

工作 对应新需求章节
群申请、公告、管理员、禁言、二维码、群文件 第 6 章
收藏分类和分享 7.1-7.8
关键词和媒体类型搜索、历史回填 7.12-7.16

P3:完成通话、设置和安全

工作 对应新需求章节
通话 ID、跨设备状态、TURN 和详单 第 8 章
资料、版本、隐私和青少年模式 第 10 章
反诈、举报、证据、反馈和后台处置 第 11 章

P4:完成企业办公

工作 对应新需求章节
组织与部门 9.2
会议通知 9.3-9.4
日报/月报 9.5-9.11
总经理信箱 9.12-9.13

10. 废弃实施规则

废弃项不要直接删除,应按以下顺序执行:

  1. 在配置和对接文档中标记 deprecated,禁止新客户端接入;
  2. 为废弃入口增加调用指标,至少观察一个完整客户端版本周期;
  3. 对匿名账号、邮箱账号、Channel 等有数据的能力先做存量扫描;
  4. 给存量用户提供迁移方案,例如邮箱账号绑定手机号、Channel 迁移普通群;
  5. 新版本服务端默认关闭,保留临时回退开关;
  6. 确认无调用和无未迁移数据后,再删除路由、配置、代码和测试;
  7. 数据库删除列或表必须单独发布,保留备份和回滚窗口。

客户端 gRPC 和 Plugin gRPC 必须分开处理:新需求没有客户端 gRPC,因此前者废弃;第 11 章需要外部审核插件,因此 Plugin Firehose 及其 gRPC 通道保留。

11. 验收口径

每项改造只有同时满足以下条件才算完成:

  1. 文档中的新需求章节有对应 API/协议、数据表和权限规则;
  2. 旧客户端兼容行为有明确结论,不依赖未定义 JSON 字段;
  3. 重试、并发、断网恢复不会产生重复业务数据;
  4. 用户不能通过直接构造协议绕过好友、黑名单、禁言、隐私和青少年策略;
  5. 文件、搜索、转发和收藏均重新执行当前用户的资源权限;
  6. 共享 SaaS 模式下通过跨租户负向测试;
  7. 审批、实名、举报、群管理和匿名信箱敏感操作有审计记录;
  8. 废弃入口有调用量证据和存量迁移结果,不能仅凭新原型没有页面就直接删除;
  9. MySQL schema、升级脚本、回滚脚本和代码中的建表定义保持一致;
  10. 服务端单元测试、MySQL 集成测试、WebSocket/HTTP 端到端测试和真实设备通话测试全部通过。

12. 最终处理建议

新系统应保留 Tinode 的实时消息内核,重点修改认证流程、消息协议、权限策略、文件授权和通话状态;好友、群治理、搜索、企业工作台、实名、青少年和举报作为新的产品业务层建设。

新需求未覆盖的匿名登录、邮箱注册验证、Channel、Long Poll、客户端 gRPC、示例聊天机器人和静态网页托管标记为废弃。多数据库 Adapter 是否物理删除取决于产品数据库决策;若产品版确定只支持 MySQL,则 PostgreSQL、MongoDB 和 RethinkDB 不再承担新业务适配与验收。

改造顺序应先处理租户、消息幂等和文件授权,再完成好友与基础消息,随后完成群治理、搜索、通话与安全,最后建设企业工作台。这样可以最大限度复用现有实现,同时避免继续维护新产品不需要的入口和功能。