Centrifugo 6.10 介绍与选型指南

Centrifugo v6.10.1 介绍与选型指南:软件定位与角色辨析(应用级实时通道 vs 用户级推送)、核心架构、功能特性与同类选型对比,信息于 2026-10-21 联网溯源取证。

Centrifugo即时通信Centrifugo2026/10/21

Centrifugo 6.10 介绍与选型指南

目标:面向架构师与选型决策者,介绍 Centrifugo v6.10.1 实时消息服务器的定位、核心架构、功能特性与同类组件对比,给出「什么场景该选 Centrifugo、什么场景不该选」的决策依据。本文为介绍与选型类文档,全部信息于 2026-10-21 从官方渠道联网溯源取证(官方仓库、官网文档站、官方发行物),不含本地实测数据;安装部署与全链路实测结论见站内《Ubuntu 22.04 安装 Centrifugo 指南》。

一、环境信息

1.1 溯源声明

本文是软件介绍与选型指南,写作方式为联网溯源:所有版本号、功能清单、许可证、发行矩阵、社区数据均取自官方渠道,并在正文中标注来源;不含作者本地实测数据。需要真实环境验证结论时,请参阅本专栏的实测系列文档:

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 都常被贴上「消息推送」标签,但角色完全不同:

维度CentrifugoGotify / ntfyNovu
角色应用级实时通道(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(默认)、redisRedis 引擎支撑多节点水平扩展,兼容 Redis Cluster 及 Valkey/KeyDB/DragonflyDB/AWS Elasticache 等 Redis 兼容存储
broker(代理)memory(默认)、redis、nats、postgres跨节点消息分发通道
consumers(消费者)PostgreSQL、Kafka从消息队列/数据库消费事件再投递进频道,官方支持 transactional outbox 与 CDC 模式(README)
presence_managermemory、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 帮助,命令形态与参数以本站实测系列为准:

  1. 生成最小配置并启动:
centrifugo genconfig                      # 生成 config.json(权限 0600)
centrifugo -c config.json                 # 前台启动主服务(无子命令,直接带 -c 指定配置)
  1. 签发测试用连接令牌:
centrifugo gentoken -c config.json -u 42  # 为用户 42 签发连接 JWT(默认有效期 7 天)
  1. 前端使用官方 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();
  1. 后端通过 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 官方列举逐项展开(溯源 + 分析):

  1. 聊天与即时通信:单连接多路复用 + 私有频道 + presence,天然覆盖房间制聊天;JWT 鉴权与后端账号体系衔接。
  2. 直播评论与弹幕:高频广播场景,批量编码与增量压缩(Fossil)可显著降低带宽;历史与恢复保证断线用户补消息。
  3. 实时数据大屏/可视化:后端事件(行情、指标、工单状态)经 HTTP API 广播进频道,前端图表秒级刷新。
  4. 协作工具:在线状态、加入/离开通知、用户限定频道支持协作场景的成员感知。
  5. AI 流式输出:大模型逐 Token 响应经频道推给前端,替代前端轮询;GRPC 代理流可将后端流式数据源直接接入订阅。
  6. 多人游戏与交互:双向协议 + 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 节的角色辨析,下表给出更完整的工程视角对比(定性维度基于各官方文档描述):

维度CentrifugoGotifyntfyNovu
核心角色实时 PUB/SUB 通道中间件个人推送收件箱HTTP PUT 推送服务多渠道通知编排
通信方向双向(含 RPC 上行)单向为主单向为主(支持自订阅)单向编排
接入抽象频道 + 订阅 + JWT/proxyapplication/tokentopic + 消息标题/正文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.12026-10-20
v6.10.02026-10-19
v6.10.0-rc.12026-10-18
v6.9.72026-09-29
v6.9.62026-09-14
v6.9.52026-09-13
v6.9.42026-09-07
v6.9.32026-08-23
v6.9.22026-08-18
v6.9.12026-07-14

从 2026-07-14 到 2026-10-20 约三个月内发布 10 个条目(含 1 个 rc),平均约 9~10 天一个版本,且缺陷修复版(patch)与功能版(minor)交替出现,维护节奏活跃、响应及时。

兼容矩阵(官方 v6.10.1 checksums.txt 溯源,查询日期 2026-10-21):

平台架构发行形态
Linuxamd64 / arm64 / armv6tar.gz、deb(amd64)、rpm(x86_64)
macOS(Darwin)amd64 / arm64tar.gz
Windowsamd64zip
FreeBSDamd64tar.gz

每个 tar 发行物均附带 .sbom.json 软件物料清单,便于供应链审计。

官方 SDK 生态(v6.10.1 发行物 README 溯源):

平台/语言SDK
JavaScript(浏览器、Node.js、React Native)centrifuge-js
Dart / Flutter(移动与 Web)centrifuge-dart
Swift / 原生 iOScentrifuge-swift
Java(Android、JVM)centrifuge-java
Python(asyncio)centrifuge-python
Gocentrifuge-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 与消费者选项。

八、参考链接