Centrifugo :可扩展的实时消息服务器
Centrifugo是一款开源且可扩展的实时消息服务器。它能迅速把消息推送给那些通过诸如WebSocket、HTTP流、服务器发送事件(即EventSource )、GRPC、WebTransport等支持的传输方式连入应用的在线用户。Centrifugo具备频道订阅机制,属于面向用户的发布/订阅服务器。
Centrifugo不受编程语言限制,搭配任意后端,就能用来打造聊天应用、实时评论系统、多人游戏、实时数据可视化工具、协作工具等等。它很契合现代架构,能将业务逻辑与实时传输层剥离开来。
针对浏览器与移动开发,官方提供了几款客户端SDK,它们对双向协议进行了封装。另外,对于简单场景,Centrifugo支持无需依赖SDK的单向模式。
Centrifugo 的核心思想很简单——它是一个基于现代实时传输的 PUB/SUB 服务器:

要让这个理念能真正投入实际生产,做到高效、灵活,还能在各种应用环境下使用,可不是件容易事。Centrifugo作为一个成熟的解决方案,已经帮不少项目增添了实时功能,还能应对大量的并发连接。Centrifugo具备一些其他开源方案没有的特性:
- 高效实时传输方式:包括WebSocket、HTTP流、服务器发送事件、GRPC、WebTransport
- 借助Redis(或Redis集群,或者像AWS Elasticache、Valkey、KeyDB、DragonflyDB这类Redis兼容存储),又或者Nats,实现了内置的可扩展性
- 提供简单的HTTP和GRPC服务器API,方便应用后端与Centrifugo通信
- 异步的PostgreSQL和Kafka消费者,支持事务性发件箱和变更数据捕获(CDC)模式
- 连接认证机制灵活:有JSON Web Token(JWT),还有类似代理的方式(Centrifugo向后端发请求来验证)
- 单个连接就能实现频道订阅多路复用
- 订阅类型多样:分客户端订阅和服务器端订阅
- 频道权限策略丰富,还有频道命名空间的概念
- 频道有热门消息历史记录,重新连接能自动恢复消息,有缓存恢复模式(订阅后马上推送最新消息)
- 基于Fossil算法对频道进行增量压缩
- 能显示在线频道的人员状态信息,还有加入和离开通知
- 可以通过实时连接,向后端发起远程过程调用(RPC)
- 官方几款SDK封装了严格有效的客户端协议
- 支持JSON和二进制的Protocol Buffers(Protobuf)消息传输,序列化经过优化,还内置了批处理功能
- 有美观的嵌入式管理Web界面
- 通过公开大量Prometheus指标,搭配官方Grafana仪表盘,可观测性强
- 更多功能,可访问Centrifugo文档网站
https://github.com/centrifugal/centrifugo
https://centrifugal.dev/