实时通信(Centrifugo)
支持频道、在线状态和发布/订阅的实时 WebSocket 消息。
创建实时服务器
创建实时实例的步骤:
- 在 sh0 控制台中进入实时服务器。
- 点击创建实时服务器。
- 输入名称(例如“my-app-realtime”)。
- 点击创建。sh0 会部署一个自动配置 SSL 的 Centrifugo 实例。
您的实时服务器可立即通过 wss://<name>.sh0.app/connection/websocket 访问。
频道
频道是 Centrifugo 的核心抽象。客户端订阅频道,并接收发布到这些频道的消息。频道名称是字符串——命名规范由您自行定义。
命名空间
使用频道命名空间将共享配置的频道分组。例如,名为 chat:room-1 和 chat:room-2 的频道属于 chat 命名空间(以 : 作为分隔符)。
在 Centrifugo 配置中,可按命名空间设置历史记录保留、在线状态跟踪和权限。
在线状态
在频道上启用在线状态,可跟踪当前有哪些用户已订阅。在线状态信息包括客户端 ID 和用户 ID。适用于:
- 显示聊天室中的在线用户。
- 显示文档中的活跃协作者。
- 统计直播的观看人数。
发布 API
通过 HTTP API 从您的后端向任意频道发布消息:
POST https://<name>.sh0.app/api/publish
Content-Type: application/json
Authorization: apikey <your-api-key>
{
"channel": "chat:room-42",
"data": { "text": "Hello!", "user": "alice" }
}
API 密钥在创建实时服务器时生成,可在控制台中查看。
Tip
发布 API 只是一个简单的 HTTP POST 请求——可从任何后端语言调用。您的服务器无需建立 WebSocket 连接。
JavaScript 客户端
安装 Centrifugo JavaScript 客户端:
npm install centrifuge
连接并订阅:
import { Centrifuge } from 'centrifuge';
const client = new Centrifuge(
'wss://my-realtime.sh0.app/connection/websocket'
);
const sub = client.newSubscription('chat:room-42');
sub.on('publication', (ctx) => {
console.log(ctx.data);
});
sub.subscribe();
client.connect();
认证
Centrifugo 支持基于 JWT 的认证。创建客户端连接时,传入一个令牌:
const client = new Centrifuge(
'wss://my-realtime.sh0.app/connection/websocket',
{ token: jwtToken }
);
令牌应包含用户的 sub(subject)声明。如果您使用 sh0 认证服务(Logto),访问令牌可直接使用。
管理面板
Centrifugo 内置管理面板,用于监控您的实时服务器。通过实时服务器的域名即可访问。面板显示:
- 活跃连接数。
- 每秒消息吞吐量。
- 活跃频道及其订阅者数量。
- 服务器节点信息和健康状态。