Centrifugo(五)频道(Channel)
频道(Channel)是消息发布的通道。客户端通过订阅频道来接收与频道相关的事件,包括发布到本频道的消息、用户订阅/取消订阅的消息等等。同样,客户端也需要订阅频道来获取频道的状态(presence)和历史消息。
频道的生命周期比较短暂,不需要显式的去声明。当第一个客户端进行订阅时,Centrifugo 会自动创建相应频道。当最后一个客户端取消订阅时,频道会立即自动被销毁。
- 频道的命名规则
频道以字符串为标识,由字母、数字、下划线或连接符组成,长度必须大于2(^[-azA-Z0-9_]{2,}$
),默认最大长度为255,如需修改可以通过配置文件中的 channel_max_length
参数进行调整。
以下几个符号是 Centrifugo 的内部保留符号:
:
- 命名空间分隔符
$
- 私有频道前缀#
- 用户频道分隔符*
- 保留字符&
- 保留字符/
- 保留字符
**命名空间分隔符(:
):**如果频道名称为 public:chat
,该频道的配置信息将使用 public
命名空间的配置参数设置。
**私有频道前缀($
):**如果频道名称以 $
开头,则意味着该频道为私有频道。订阅私有频道必须通过应用程序后端签名。
**用户频道分隔符(#
):**该字符用于创建用户专属频道,而无需向后端Web应用程序发送POST请求。例如,频道名 news#42
,表示只有 ID 为 42 的用户可以订阅该频道。客户端在连接 Centrifugo 时需要提供 Token,其中包含了 user ID,因此 Centrifugo 清楚每个客户端的 user ID。另外,用户频道可以支持多个 user ID,user ID 之间通过逗号分隔,例如 dialog#42,43
。此种类型的频道适用于固定用户,例如用户个人消息通道、确定用户之间的对话通道,一旦需要动态用户访问频道,此频道类型就不合适了。