Centrifugo 6.10 介绍与选型指南
Centrifugo v6.10.1 介绍与选型指南:软件定位与角色辨析(应用级实时通道 vs 用户级推送)、核心架构、功能特性与同类选型对比,信息于 2026-10-21 联网溯源取证。
Centrifugo 6.10 介绍与选型指南
目标:面向架构师与选型决策者,介绍 Centrifugo v6.10.1 实时消息服务器的定位、核心架构、功能特性与同类组件对比,给出「什么场景该选 Centrifugo、什么场景不该选」的决策依据。本文为介绍与选型类文档,全部信息于 2026-10-21 从官方渠道联网溯源取证(官方仓库、官网文档站、官方发行物),不含本地实测数据;安装部署与全链路实测结论见站内《Ubuntu 22.04 安装 Centrifugo 指南》。
一、环境信息
1.1 溯源声明
本文是软件介绍与选型指南,写作方式为联网溯源:所有版本号、功能清单、许可证、发行矩阵、社区数据均取自官方渠道,并在正文中标注来源;不含作者本地实测数据。需要真实环境验证结论时,请参阅本专栏的实测系列文档:
- 安装与全链路验证(生成 JWT → WebSocket 连接 → 订阅频道 → HTTP API 发布 → 消息送达):《Ubuntu 22.04 安装 Centrifugo 指南》
- 配置参数逐段解析:《Centrifugo 6.10 配置参数详解》
- CLI 命令逐参数回显:《Centrifugo 6.10 常用 CLI 命令详解》
1.2 信息来源清单
| 来源 | 取证内容 | 查询日期 |
|---|---|---|
| GitHub 仓库 releases.atom(centrifugal/centrifugo) | 最新版本号、发布节奏 | 2026-10-21 |
| 官方文档站 centrifugal.dev | 定位表述、安装路径、快速开始流程 | 2026-10-21 |
| 官方发行物 v6.10.1(tar.gz 内 README.md、LICENSE;sha256 校验通过后离线提取) | 功能清单、SDK 列表、许可证 | 2026-10-21 |
官方发行物 v6.10.1 内 defaultconfig 输出(sha256 校验通过后离线提取) | 配置段构成、引擎/代理/消费者类型 | 2026-10-21 |
| 官方发行物 v6.10.1 checksums.txt(sha256 校验通过) | 发行平台与架构矩阵、SBOM 交付 | 2026-10-21 |
| shields.io GitHub 星数徽章 | 社区活跃度(约 11k stars) | 2026-10-21 |
| 官网文档站与 sitemap | 维护方信息、PRO 商业版存在性 | 2026-10-21 |
1.3 组件版本与发行信息
- 最新版本:v6.10.1,发布于 2026-10-19(GitHub Releases Atom 源,查询日期 2026-10-21)。
- 技术栈:Go 语言编写,官方发行物为单个可执行二进制(tar 包内仅
centrifugo、README.md、LICENSE、CHANGELOG.md四个文件)。 - 许可证:Apache License 2.0(官方仓库 LICENSE 与发行物内 LICENSE 文件一致)。
- 维护方:Centrifugal Labs LTD(官网页脚署名);另提供商业版 Centrifugo PRO(官网设有独立 PRO 文档章节)。
- 本站专栏背景:本站已收录 Gotify、ntfy、Novu 等推送/通知类组件专栏,本文第七章将围绕这些组件与 Centrifugo 做角色辨析与选型对比。
二、软件概述
2.1 一句话定位
官方仓库 README 的第一句定义(v6.10.1 发行物原文):
Scalable real-time messaging server in a language-agnostic way.
即「可扩展的实时消息服务器,以语言无关的方式提供」。展开来说:
- 它是一个 PUB/SUB 服务器:README 原文「so it's a user-facing PUB/SUB server」——用户(浏览器、移动 App、桌面端、IoT)通过长连接订阅频道、接收消息。
- 它面向应用级实时通道:后端业务系统通过 HTTP API 或 GRPC API 向频道发布消息,前端用户实时收到。README 列举的典型用途:chat apps(聊天)、live comments(直播评论)、multiplayer games(多人游戏)、real-time data visualizations(实时数据大屏)、collaborative tools(协作工具)、AI streaming responses(AI 流式输出)。
- 它是自托管方案:官方将 Centrifugo 定位为 Pubnub、Ably、Pusher 这类实时云服务的自托管替代(官网表述),数据不出内网,按连接量自扩容。
2.2 角色辨析:应用级实时通道 vs 用户级推送服务
这是本组件选型中最容易混淆的一点。Centrifugo 与 Gotify、ntfy、Novu 都常被贴上「消息推送」标签,但角色完全不同:
| 维度 | Centrifugo | Gotify / ntfy | Novu |
|---|---|---|---|
| 角色 | 应用级实时通道(PUB/SUB 中间件) | 用户级推送服务(个人通知收件箱) | 多渠道通知编排服务 |
| 消息方向 | 双向(客户端可订阅、可发布、可 RPC) | 以单向为主(服务器 → 用户设备) | 单向编排(系统 → 多渠道触达) |
| 消息语义 | 业务数据流:聊天消息、状态变更、行情、AI Token 流 | 通知:告警、提醒、完成通知 | 通知的事件编排与路由 |
| 频道模型 | 命名空间/私有/用户绑定频道,单连接多路复用订阅 | 面向用户/设备的收件箱主题 | 面向订阅者的多渠道工作流 |
| 客户端形态 | 7 个官方 SDK + 双向协议(或无 SDK 的单向传输) | 手机/桌面 App、Web 界面收通知 | SDK/REST API 触达 email/SMS/推送/in-app |
| 典型问题 | 「如何让网页上的数据实时变化」 | 「如何让我的手机收到服务器通知」 | 「如何用一套 API 把通知发到所有渠道」 |
一个务实的判断标准:如果你的系统里消息是业务交互本身(聊天气泡、协作者光标、实时图表刷新、大模型逐字输出),选 Centrifugo;如果消息只是系统的附属提醒(构建完成通知、磁盘告警),选 Gotify/ntfy;如果诉求是统一管理多渠道通知触达策略,选 Novu。三者也可以共存,例如 Novu 编排的 in-app 消息最终经 Centrifugo 频道送达在线用户。
2.3 许可证与维护方
- 许可证:Apache License 2.0(发行物 LICENSE 溯源)。对商业友好:可闭源集成、可二次分发,只需保留许可声明。
- 维护方:Centrifugal Labs LTD,核心作者 Alexander Emelin(GitHub 账号 FZambia,官方 packagecloud 源路径即以其命名)。项目自 2016 年开源至今持续迭代,当前由公司化主体维护,社区版(OSS)与商业版(PRO)并行。
- 社区入口:README 提供 Telegram 与 Discord 社区链接,并有 X(Twitter)官方账号。
三、核心架构
3.1 总体数据流
Centrifugo 在架构中处于「前端长连接」与「后端业务」之间,官方 README 的架构描述如下:
浏览器/移动端/App ──(WebSocket 等实时传输)──> Centrifugo <──(HTTP API / GRPC API)── 应用后端
- 前端客户端使用官方 SDK(或无 SDK 的单向传输)与 Centrifugo 建立长连接、订阅频道;
- 应用后端不直接持有用户长连接,而是在业务事件发生时调用 Centrifugo 的 HTTP API / GRPC API 把消息发布进频道;
- Centrifugo 负责鉴权、路由、扩容与投递,把业务逻辑与实时传输层解耦——README 原文:「allows decoupling the business logic from the real-time transport layer」。
这种「连接与业务分离」的形态意味着:后端可以用任意语言(PHP/Java/Rust/Python……)写业务,只需一个 HTTP 调用即可广播消息;前端则不必为每种业务各建一条 WebSocket。
3.2 传输协议
v6.10.1 支持的实时传输(README 溯源):
| 传输 | 方向 | 说明 |
|---|---|---|
| WebSocket | 双向 | 默认主力传输,双向协议载体 |
| HTTP-streaming | 双向 | 基于 HTTP 分块流的双向通道(带 emulation 层) |
| SSE(EventSource) | 双向* | 单向流 + emulation 层补齐回程(* 指配合 emulation 实现双向语义) |
| GRPC | 双向 | GRPC 传输端点 |
| WebTransport | 双向 | 实验性(README 标注 experimental) |
配套要点:
- 序列化:JSON 与二进制 Protobuf 两种消息编码,内置批量打包(README)。
- 单向模式:对简单场景提供 unidirectional approach——WebSocket、SSE、HTTP-streaming、GRPC 四种单向端点,任何该传输的标准客户端都能收消息,无需 SDK(README;v6.10.1 发行物 defaultconfig 中对应
uni_websocket/uni_sse/uni_http_stream/uni_grpc四个配置段)。 - 协议纪律:v6 双向协议要求客户端每条命令携带自增
id字段,缺失会被服务端断开(本站《Ubuntu 22.04 安装 Centrifugo 指南》实测归纳,直接裸写 WebSocket 协议前必读)。
3.3 通道模型
- namespace 命名空间:频道名以
:分隔命名空间(如chat:main),每个命名空间可独立设置订阅权限、历史、在线状态等选项(v6.10.1 发行物channel配置段与官方文档溯源)。 - 私有频道
$前缀:订阅必须经服务端授权(订阅令牌或 proxy 校验)。 - 用户限定频道
user#/user#42:服务端自动限制只有对应用户可订阅。 - 单连接多路复用:一条连接上可同时挂载多个订阅(README「Channel subscription multiplexing over a single connection」),省连接、省握手。
- 订阅流类型:README 列出四类——stream(常规流,客户端侧/服务端侧订阅)、map(KV 状态流)、shared poll(共享轮询)、proxy subscription streams(由后端数据源驱动的代理流)。
3.4 认证与授权
- JWT 连接令牌:客户端连接须携带后端签发的 JWT(支持 HMAC、RSA、ECDSA 签名算法与 JWKS 密钥集);官方 CLI
gentoken/gensubtoken可签发测试令牌(本站《Centrifugo 6.10 常用 CLI 命令详解》已逐参数实测)。 - JWT 订阅令牌:对私有频道/受限订阅单独签发订阅令牌。
- Proxy 机制:除 JWT 外还支持「代理鉴权」——Centrifugo 在 connect/subscribe/publish/RPC 事件上回调后端(HTTP 或 GRPC),由后端实时决定放行与否(README「Flexible connection authentication mechanisms: JWT and proxy-like」)。
3.5 扩展引擎、消息代理与消费者
单机即可运行(默认 memory 引擎),横向扩展时按规模选择(README + v6.10.1 发行物 defaultconfig 溯源):
| 层 | 选项 | 用途 |
|---|---|---|
| engine(引擎) | memory(默认)、redis | Redis 引擎支撑多节点水平扩展,兼容 Redis Cluster 及 Valkey/KeyDB/DragonflyDB/AWS Elasticache 等 Redis 兼容存储 |
| broker(代理) | memory(默认)、redis、nats、postgres | 跨节点消息分发通道 |
| consumers(消费者) | PostgreSQL、Kafka | 从消息队列/数据库消费事件再投递进频道,官方支持 transactional outbox 与 CDC 模式(README) |
| presence_manager | memory、redis | 在线状态存储 |
3.6 管理界面与可观测性
- 内嵌 Admin Web UI:服务根路径即管理界面,可实时查看在线连接并手动向频道发消息(README「Beautiful embedded admin web UI」;本站安装篇实测管理登录走根路径表单接口)。
- Prometheus 指标:暴露大量内置指标,官方提供 Grafana 仪表盘(README)。
- OpenTelemetry 与 Swagger:v6.10.1 发行物 defaultconfig 中含
opentelemetry、swagger配置段,可开启链路追踪与 API 文档端点。
四、功能特性
以下功能清单整理自官方 v6.10.1 发行物 README 的「Why Centrifugo」章节(溯源,查询日期 2026-10-21),按主题归组:
传输与协议
- 高效实时传输:WebSocket、HTTP-streaming、SSE、GRPC、WebTransport(实验性);
- JSON 与二进制 Protobuf 双编码,优化序列化与内置批量发送;
- 严格而高效的客户端协议,由多个官方 SDK 封装。
扩展与存储
- 内置可扩展性:Redis(含 Cluster 及 Valkey、KeyDB、DragonflyDB 等兼容存储)、PostgreSQL 或 Nats;
- 异步 PostgreSQL 与 Kafka 消费者,支持事务性 outbox 与 CDC 模式。
订阅与消息可靠性
- 单连接多路复用订阅;丰富的订阅流模型(stream/map/shared poll/proxy);
- 频道热历史(hot message history),重连后自动消息恢复(recovery),缓存恢复模式(订阅瞬间先拿到最新一条 publication);
- 基于 Fossil 算法的频道增量压缩(delta compression);
- 在线状态(presence)与加入/离开通知。
安全与鉴权
- JWT 与 proxy 两类连接鉴权机制;
- 灵活的频道权限策略与 namespace 概念。
API 与集成
- 简单的 HTTP 与 GRPC 服务器 API,供后端与 Centrifugo 通信;
- 通过实时连接向后端发送 RPC 调用。
运维观测
- 内嵌美观的管理 Web UI;
- 大量 Prometheus 指标 + 官方 Grafana 仪表盘。
五、快速开始(最小可用示例)
5.1 官方安装路径概览
官方文档站安装页(centrifugal.dev/docs/getting-started/installation,查询日期 2026-10-21)提供四类安装形态:包管理器在线源、deb/rpm 离线包、原生二进制 tar.gz、Docker 镜像(另有 Homebrew)。本站已在 Ubuntu 22.04 服务器上对前三类完成逐条实测,包括 packagecloud 在线源、deb 离线安装与 tar.gz 二进制方案,步骤与排障见《Ubuntu 22.04 安装 Centrifugo 指南》。
5.2 最小可用流程(官方步骤溯源)
以下流程来自官方文档站 getting-started/quickstart 与发行物 CLI 帮助,命令形态与参数以本站实测系列为准:
- 生成最小配置并启动:
centrifugo genconfig # 生成 config.json(权限 0600)
centrifugo -c config.json # 前台启动主服务(无子命令,直接带 -c 指定配置)
- 签发测试用连接令牌:
centrifugo gentoken -c config.json -u 42 # 为用户 42 签发连接 JWT(默认有效期 7 天)
- 前端使用官方 centrifuge-js SDK 连接并订阅(官方文档站 quickstart 示例形态,溯源):
const centrifuge = new Centrifuge('ws://<服务器地址>:8000/connection/websocket',
{ token: '<连接JWT>' });
centrifuge.on('connected', (ctx) => console.log('connected', ctx));
const sub = centrifuge.newSubscription('chat:main');
sub.on('publication', (ctx) => console.log(ctx.data));
sub.subscribe();
centrifuge.connect();
- 后端通过 HTTP API 发布消息(官方 server API 文档形态,溯源):
curl -X POST http://<服务器地址>:8000/api \
-H 'X-API-Key: <api_key>' \
-d '{"method": "publish", "params": {"channel": "chat:main", "data": {"text": "hello"}}}'
5.3 站内实测背书
上述「签发令牌 → 连接 → 订阅 → API 发布 → 消息送达」全链路已在 Ubuntu 22.04 服务器上端到端跑通,客户端真实收到 {"push":{"channel":"chat:main","pub":{"data":{...}}}} 投递帧,过程中沉淀了权限、Origin、协议 id 等 8 条排障记录,见《Ubuntu 22.04 安装 Centrifugo 指南》第十章;配置文件的完整参数面见《Centrifugo 6.10 配置参数详解》。
六、适用场景与限制
6.1 适用场景
按 README 官方列举逐项展开(溯源 + 分析):
- 聊天与即时通信:单连接多路复用 + 私有频道 + presence,天然覆盖房间制聊天;JWT 鉴权与后端账号体系衔接。
- 直播评论与弹幕:高频广播场景,批量编码与增量压缩(Fossil)可显著降低带宽;历史与恢复保证断线用户补消息。
- 实时数据大屏/可视化:后端事件(行情、指标、工单状态)经 HTTP API 广播进频道,前端图表秒级刷新。
- 协作工具:在线状态、加入/离开通知、用户限定频道支持协作场景的成员感知。
- AI 流式输出:大模型逐 Token 响应经频道推给前端,替代前端轮询;GRPC 代理流可将后端流式数据源直接接入订阅。
- 多人游戏与交互:双向协议 + RPC over realtime connection 支持轻量交互指令上行。
6.2 限制与边界
- 不是持久化消息队列:频道历史定位是「热历史」(hot history),用于近期回放与重连恢复,不提供 Kafka 式的持久化存储与回溯语义;需要强持久化时官方建议组合消费者模式(README),把 MQ 作为事实源。
- 多节点依赖外部存储:单机默认 memory 引擎只能单节点;水平扩展必须引入 Redis(或 PostgreSQL/Nats broker)——这是运维上的额外组件依赖。
- 双向协议不宜裸写:v6 双向协议每条命令须带自增
id、连接须带name字段(本站实测归纳,见《Ubuntu 22.04 安装 Centrifugo 指南》 FAQ),生产建议一律使用官方 SDK 或无 SDK 的单向传输。 - 商业能力边界:OSS 版之外另有 Centrifugo PRO 商业版,部分企业级能力按官网 PRO 文档章节提供,选型时需对照官网核对所需能力是否在 OSS 版内。
- 浏览器跨域默认全拒:
allowed_origins默认空列表,浏览器接入前必须显式配置允许的 Origin(本站实测,配置项解析见《Centrifugo 6.10 配置参数详解》)。
七、同类选型对比
7.1 角色三分法对比
延续 2.2 节的角色辨析,下表给出更完整的工程视角对比(定性维度基于各官方文档描述):
| 维度 | Centrifugo | Gotify | ntfy | Novu |
|---|---|---|---|---|
| 核心角色 | 实时 PUB/SUB 通道中间件 | 个人推送收件箱 | HTTP PUT 推送服务 | 多渠道通知编排 |
| 通信方向 | 双向(含 RPC 上行) | 单向为主 | 单向为主(支持自订阅) | 单向编排 |
| 接入抽象 | 频道 + 订阅 + JWT/proxy | application/token | topic + 消息标题/正文 | workflow + subscriber |
| 前端集成 | 官方 SDK(7 语言/平台) | App 内查看为主 | App/Web 订阅主题 | 渠道级集成 |
| 扩展形态 | Redis/PostgreSQL/Nats 多节点 | 单实例为主 | 单实例为主 | 云/自托管均有 |
| 本站专栏 | 本文 | 已收录专栏 | 已收录专栏 | 已收录专栏 |
7.2 与 SaaS 实时云对比
与 Pubnub、Ably、Pusher 等实时云服务相比,Centrifugo 的差异点是自托管(官网定位表述,2026-10-21 溯源):
- 数据留在自己的基础设施内,合规与隐私可控;
- 按服务器规格而非消息量计费,高连接量场景成本模型更可预期;
- 代价是自行承担可用性、扩容与升级运维;官方同时提供 PRO 商业版承接企业支持诉求。
7.3 量化维度
社区活跃度:GitHub 星数约 11k(shields.io 徽章读数,查询日期 2026-10-21);README 提供 Telegram/Discord/X 三个社区入口;项目由公司化主体(Centrifugal Labs LTD)持续维护。
版本节奏(GitHub releases.atom,查询日期 2026-10-21,近 10 个发布条目):
| 版本 | 发布时间(UTC) |
|---|---|
| v6.10.1 | 2026-10-20 |
| v6.10.0 | 2026-10-19 |
| v6.10.0-rc.1 | 2026-10-18 |
| v6.9.7 | 2026-09-29 |
| v6.9.6 | 2026-09-14 |
| v6.9.5 | 2026-09-13 |
| v6.9.4 | 2026-09-07 |
| v6.9.3 | 2026-08-23 |
| v6.9.2 | 2026-08-18 |
| v6.9.1 | 2026-07-14 |
从 2026-07-14 到 2026-10-20 约三个月内发布 10 个条目(含 1 个 rc),平均约 9~10 天一个版本,且缺陷修复版(patch)与功能版(minor)交替出现,维护节奏活跃、响应及时。
兼容矩阵(官方 v6.10.1 checksums.txt 溯源,查询日期 2026-10-21):
| 平台 | 架构 | 发行形态 |
|---|---|---|
| Linux | amd64 / arm64 / armv6 | tar.gz、deb(amd64)、rpm(x86_64) |
| macOS(Darwin) | amd64 / arm64 | tar.gz |
| Windows | amd64 | zip |
| FreeBSD | amd64 | tar.gz |
每个 tar 发行物均附带 .sbom.json 软件物料清单,便于供应链审计。
官方 SDK 生态(v6.10.1 发行物 README 溯源):
| 平台/语言 | SDK |
|---|---|
| JavaScript(浏览器、Node.js、React Native) | centrifuge-js |
| Dart / Flutter(移动与 Web) | centrifuge-dart |
| Swift / 原生 iOS | centrifuge-swift |
| Java(Android、JVM) | centrifuge-java |
| Python(asyncio) | centrifuge-python |
| Go | centrifuge-go |
| .NET / MAUI / Unity(WIP) | centrifuge-csharp |
7.4 选型建议
- 如果需要自建的、双向的、面向业务数据的实时通道(聊天、协作、大屏、AI 流式输出)→ 选 Centrifugo;
- 如果只需要服务器给个人设备发通知、不想引入 SDK 与订阅模型 → 选 Gotify/ntfy(本站均有专栏);
- 如果核心诉求是一套工作流把通知编排到邮件/短信/推送等多个渠道 → 选 Novu;
- 如果倾向SaaS 托管、不自运维 → 评估 Pubnub/Ably/Pusher,接受消息量计费与数据出域;
- 如果业务里聊天/实时面板与通知告警同时存在 → Centrifugo 与 Gotify/ntfy/Novu 互补共存,而非二选一;
- 如果团队已重度使用 Redis,Centrifugo 的 Redis 引擎扩展路径几乎零新增组件;若希望减少 Redis 依赖,v6.10.1 已提供 PostgreSQL/Nats broker 与消费者选项。
八、参考链接
- 官方文档站:https://centrifugal.dev
- 安装指南(官方):https://centrifugal.dev/docs/getting-started/installation
- 快速开始教程(官方):https://centrifugal.dev/docs/getting-started/quickstart
- 设计概览(官方):https://centrifugal.dev/docs/getting-started/design
- 传输总览(官方):https://centrifugal.dev/docs/transports/overview
- GitHub 仓库:https://github.com/centrifugal/centrifugo
- Releases 页:https://github.com/centrifugal/centrifugo/releases
- 示例仓库:https://github.com/centrifugal/examples
- 站内进阶阅读:《Ubuntu 22.04 安装 Centrifugo 指南》、《Centrifugo 6.10 配置参数详解》、《Centrifugo 6.10 常用 CLI 命令详解》