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。此种类型的频道适用于固定用户,例如用户个人消息通道、确定用户之间的对话通道,一旦需要动态用户访问频道,此频道类型就不合适了。