文档/ 后端即服务/ 实时通信(Centrifugo)

实时通信(Centrifugo)

支持频道、在线状态和发布/订阅的实时 WebSocket 消息。

创建实时服务器

创建实时实例的步骤:

  1. 在 sh0 控制台中进入实时服务器。
  2. 点击创建实时服务器。
  3. 输入名称(例如“my-app-realtime”)。
  4. 点击创建。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 内置管理面板,用于监控您的实时服务器。通过实时服务器的域名即可访问。面板显示:

  • 活跃连接数。
  • 每秒消息吞吐量。
  • 活跃频道及其订阅者数量。
  • 服务器节点信息和健康状态。