Files
im_server/docs/FEATURES.md
T
2026-08-11 15:59:57 +08:00

18 KiB
Raw Blame History

Tinode IM 功能详解

本文档全面介绍 Tinode 即时通讯平台的功能特性,帮助理解产品能力和使用场景。


目录


产品概述

什么是 Tinode

Tinode 是一个开源的即时通讯平台,提供完整的 IM 基础设施:

特性 说明
开源免费 GPL 3.0 许可证,代码完全开源
跨平台 支持 Android、iOS、Web 三端
多协议 WebSocket、gRPC、长轮询
多数据库 MySQL、PostgreSQL、MongoDB、RethinkDB
高并发 支持数万并发连接
可扩展 支持集群部署、插件系统

核心架构

┌─────────────────────────────────────────────────────────────┐
│                         客户端层                             │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐                  │
│  │ Android  │  │   iOS    │  │   Web    │                  │
│  │ Tindroid │  │ Tinodious│  │TinodeWeb │                  │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘                  │
└───────┼─────────────┼─────────────┼─────────────────────────┘
        │             │             │
        ▼             ▼             ▼
┌─────────────────────────────────────────────────────────────┐
│                        协议层                                │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐                  │
│  │WebSocket │  │   gRPC   │  │Long Poll │                  │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘                  │
└───────┼─────────────┼─────────────┼─────────────────────────┘
        │             │             │
        ▼             ▼             ▼
┌─────────────────────────────────────────────────────────────┐
│                        服务端                                │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │   Hub    │  │  Topic   │  │ Session  │  │   Auth   │   │
│  │ 连接中心 │  │ 消息路由 │  │ 会话管理 │  │ 认证模块 │   │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │
└─────────────────────────────────────────────────────────────┘
        │
        ▼
┌─────────────────────────────────────────────────────────────┐
│                        存储层                                │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │  MySQL   │  │PostgreSQL│  │ MongoDB  │  │ RethinkDB│   │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │
└─────────────────────────────────────────────────────────────┘

核心功能

1. 消息收发

基本特性

功能 说明
实时消息 WebSocket 实时推送,毫秒级延迟
离线消息 用户上线自动推送离线期间的消息
消息回执 已发送、已送达、已读取三种状态
消息撤回 支持撤回已发送的消息
消息引用 回复特定消息,形成对话链
消息转发 转发消息到其他会话

消息状态流转

发送 → 已发送(sent) → 已送达(delivered) → 已读取(read)
         │                │                    │
         │                │                    └── 接收方打开会话
         │                │
         │                └── 接收方客户端收到
         │
         └── 服务器确认接收

2. 消息类型

文本消息

  • 纯文本消息
  • 富文本消息(Drafty 格式)
  • 支持@提及功能
  • 支持表情符号

多媒体消息

类型 格式支持 说明
图片 JPEG, PNG, GIF, WebP 自动生成缩略图
视频 MP4, MOV, WebM 支持视频预览
音频 MP3, AAC, OGG 语音消息支持
文件 任意格式 文档、压缩包等

特殊消息

类型 说明
位置 地理位置分享
名片 用户名片分享
链接预览 自动抓取网页标题、描述、图片

3. 输入状态

实时显示对方输入状态:

状态 说明
kp 正在输入文字
kpa 正在录制语音
kpv 正在录制视频

会话类型

1. 单聊(P2P)

两个用户之间的私密对话:

特性 说明
自动创建 首次发消息自动创建会话
双向同步 双方看到不同的会话名(对方用户ID)
加密存储 消息加密存储在数据库
阅后即焚 支持(需客户端实现)

2. 群聊(Group)

多用户之间的群组对话:

特性 说明
创建群组 任意用户可创建群组
成员上限 默认支持数百人(可配置)
权限管理 所有者、管理员、普通成员
邀请加入 成员可邀请新成员
踢出成员 管理员可踢出成员
退出群组 成员可主动退出

群组角色

角色 权限
所有者(Owner) 全部权限,可转让所有者
管理员(Admin) 管理成员、修改群信息
普通成员(Member) 发送消息、查看成员

3. 频道(Channel)

单向广播式群组:

特性 普通群组 频道
订阅者数量 有限制 无限制(只读)
消息发送者 所有成员 仅管理员
加入通知 有 无
消息来源 显示发送者 不显示
用途 团队协作 内容分发

4. 系统消息(sys)

与系统管理员通信的通道:

  • 普通用户可向系统发送消息(如举报)
  • root 用户可订阅并查看所有消息
  • 用于客服、举报等场景

用户体系

1. 用户属性

属性 说明
username 登录名(唯一,用于 basic 认证)
public 公开资料(昵称、头像、简介)
private 私有数据(仅自己可见)
trusted 可信标记(由系统设置)
tags 发现标签(用于搜索)

2. 用户状态

状态 说明
ok 正常状态
susp 暂停状态(禁止访问,可恢复)
del 已删除状态(软删除)

3. 认证方式

方式 说明
Basic 用户名 + 密码
Token 加密令牌(主要方式)
Anonymous 匿名登录(仅创建账户)
REST 外部认证系统集成

4. 多设备登录

  • 支持同一用户多设备同时在线
  • 每个设备独立会话
  • 消息同步到所有设备
  • 设备标识(User Agent)区分

群组功能

1. 群组管理

创建群组

{sub topic="new"} → 创建普通群组
{sub topic="nch"} → 创建频道

群组信息

信息 说明
名称 群组名称
头像 群组图标
简介 群组描述
标签 发现标签

2. 成员管理

邀请加入

发送者: {set topic="grpXXX" sub={user="usrYYY", mode="JRWS"}}
接收者: {pres what="acs"} → 收到邀请通知

权限控制

权限 说明
J 加入权限(订阅话题)
R 读取权限(接收消息)
W 写入权限(发送消息)
P 在线状态(查看成员状态)
A 管理权限(审批、踢人)
S 分享权限(邀请他人)
D 删除权限(硬删除消息)
O 所有者(完全控制)

3. 群组操作

操作 说明
修改群名 所有者权限
修改群头像 所有者权限
修改群公告 管理员权限
设置管理员 所有者权限
踢出成员 管理员权限
解散群组 所有者权限

文件传输

1. 上传方式

带外上传(推荐)

大文件通过 HTTP POST 单独上传:

POST /v0/file/u
Content-Type: multipart/form-data

响应: {ctrl: {params: {url: "/v0/file/s/xxx.jpg"}}}

消息引用

{
  "pub": {
    "head": {"mime": "text/x-drafty"},
    "content": {"ent": [{"data": {"ref": "/v0/file/s/xxx.jpg"}}]}
  },
  "extra": {"attachments": ["/v0/file/s/xxx.jpg"]}
}

2. 存储方式

方式 说明
本地文件系统 适用于单机部署
AWS S3 适用于云端部署
自定义存储 实现 media 接口即可

3. 文件限制

配置项 说明
max_file_size 最大文件大小
allowed_mime_types 允许的 MIME 类型
upload_timeout 上传超时时间

推送通知

1. 支持平台

平台 推送服务
Android Firebase Cloud Messaging (FCM)
iOS FCM / APNs
Web Web Push API

2. 推送内容

{
  "topic": "grpXXX",
  "xfrom": "usrYYY",
  "ts": "2024-01-01T00:00:00Z",
  "seq": "123",
  "mime": "text/x-drafty",
  "content": "消息内容..."
}

3. 推送策略

状态 推送行为
前台运行 不推送,实时接收
后台运行 推送通知
离线 推送通知,上线后同步

4. 设备管理

  • 每个设备注册唯一 dev_id
  • 支持多设备推送
  • 支持设备解绑

视频通话

1. 基本流程

┌─────────────────────────────────────────────────────────────┐
│                        呼叫建立                             │
│                                                             │
│  呼叫方                    服务端                    被叫方 │
│    │                         │                         │    │
│    │──── {note what="call"} ─┼───── {info what="call"} ────>│
│    │                         │                         │    │
│    │                         │<──── {note what="call"} ─────│ 接听
│    │                         │                         │    │
│    │<───── {info what="call"} ──────────────────────────────│
│    │                         │                         │    │
│    │<════════════════════ WebRTC Signaling ════════════════>│
│    │                         │                         │    │
│    │<═══════════════════════ Media Stream ═════════════════>│
│    │                         │                         │    │
└─────────────────────────────────────────────────────────────┘

2. 通话类型

类型 说明
音频通话 纯语音通话
视频通话 音视频通话
屏幕共享 共享屏幕内容

3. 信令流程

  1. 发起呼叫: {note what="call", seq=...}
  2. 接听/拒绝: {note what="call", seq=...}
  3. 挂断: {note what="call", seq=...}
  4. WebRTC 信令: 通过 {note what="data", content=...} 传递

安全机制

1. 传输安全

层面 措施
传输加密 TLS/HTTPS/WSS
API 鉴权 API Key 验证
防篡改 HMAC 签名

2. 认证安全

措施 说明
Token 加密 令牌使用 AES 加密
Token 过期 可配置过期时间
密码哈希 bcrypt 存储密码

3. 访问控制

权限矩阵

实际权限 = want AND given
操作 权限要求
发送消息 W
接收消息 R
查看成员 P
邀请成员 S
管理成员 A
删除消息 D
管理群组 O

4. 数据安全

功能 说明
软删除 消息标记删除,保留数据
硬删除 物理删除消息(需 D 权限)
消息清理 自动清理过期消息

扩展能力

1. 插件系统

通过 gRPC Plugin API 开发插件:

service Plugin {
    rpc Firehose(stream PluginReq) returns (stream PluginResp);
}

插件事件

事件 说明
Account creation 账户创建
Message publish 消息发布
Subscription 订阅事件
Topic creation 话题创建

2. 聊天机器人

示例:chatbot 插件

# 监听新用户创建
# 自动发送欢迎消息
# 回复用户消息

3. 自定义认证

集成外部认证系统:

┌─────────────┐     REST API     ┌─────────────┐
│   Tinode    │ ───────────────> │  External   │
│   Server    │                  │    Auth     │
│             │ <─────────────── │   Server    │
└─────────────┘     JSON Resp    └─────────────┘

4. 数据库适配

实现 db.Adapter 接口即可支持新数据库:

type Adapter interface {
    Open(config string) error
    Close() error
    UserGet(uid string) (*User, error)
    MessageSave(msg *Message) error
    // ...
}

应用场景

1. 社交应用

功能 实现方式
私信 P2P 话题
群聊 群组话题
发现用户 fnd 话题 + tags
用户资料 me 话题 + public

2. 企业办公

功能 实现方式
部门群组 群组话题
公司公告 频道话题
文件共享 带外文件 + 消息引用
视频会议 WebRTC 视频通话

3. 客服系统

功能 实现方式
匿名咨询 anonymous 认证
客服工号 sys 话题
消息记录 历史消息查询
机器人客服 chatbot 插件

4. IoT 通知

功能 实现方式
设备告警 群组话题
远程控制 自定义消息格式
数据上报 消息 content 字段

功能对比

与其他 IM 方案对比

功能 Tinode 自建 WebSocket 第三方 SDK
开源免费 ✅ ✅ ❌
多端支持 ✅ 需自建 ✅
消息存储 ✅ 需自建 ✅
离线推送 ✅ 需自建 ✅
群组功能 ✅ 需自建 ✅
视频通话 ✅ 需自建 ✅
自定义认证 ✅ 完全自主 受限
数据私有 ✅ ✅ ❌
部署难度 中等 高 低

快速体验

1. Docker 部署

# 启动 MySQL 版本
docker run -d -p 6060:18080 \
    --name tinode-server \
    tinode/tinode-mysql:latest

# 访问 Web 客户端
open http://localhost:6060

2. 默认账户

使用 tinode-db 工具初始化测试数据:

用户名 密码 说明
alice alice123 测试用户
bob bob123 测试用户
carol carol123 测试用户
dave dave123 测试用户
tino tino123 聊天机器人

3. API 测试

# 使用 tn-cli 测试
cd tn-cli
pip install -r requirements.txt
python tn-cli.py --login-basic=alice:alice123

客户端下载

平台 仓库 说明
Web github.com/tinode/webapp React SPA
Android github.com/tinode/tindroid 原生应用
iOS github.com/tinode/tinodious Swift 原生

更多文档