Centrifugo(五)频道(Channel)

    频道(Channel)是消息发布的通道。客户端通过订阅频道来接收与频道相关的事件,包括发布到本频道的消息、用户订阅/取消订阅的消息等等。同样,客户端也需要订阅频道来获取频道的状态(presence)和历史消息。

    频道的生命周期比较短暂,不需要显式的去声明。当第一个客户端进行订阅时,Centrifugo 会自动创建相应频道。当最后一个客户端取消订阅时,频道会立即自动被销毁。

  • 频道的命名规则

    频道以字符串为标识,由字母、数字、下划线或连接符组成,长度必须大于2(^[-azA-Z0-9_]{2,}$),默认最大长度为255,如需修改可以通过配置文件中的 channel_max_length 参数进行调整。

以下几个符号是 Centrifugo 的内部保留符号:

  1. : - 命名空间分隔符
  • $ - 私有频道前缀
  • # - 用户频道分隔符
  • * - 保留字符
  • & - 保留字符
  • / - 保留字符

**命名空间分隔符(:):**如果频道名称为 public:chat,该频道的配置信息将使用 public 命名空间的配置参数设置。

**私有频道前缀($):**如果频道名称以 $ 开头,则意味着该频道为私有频道。订阅私有频道必须通过应用程序后端签名。

**用户频道分隔符(#):**该字符用于创建用户专属频道,而无需向后端Web应用程序发送POST请求。例如,频道名 news#42,表示只有 ID 为 42 的用户可以订阅该频道。客户端在连接 Centrifugo 时需要提供 Token,其中包含了 user ID,因此 Centrifugo 清楚每个客户端的 user ID。另外,用户频道可以支持多个 user ID,user ID 之间通过逗号分隔,例如 dialog#42,43。此种类型的频道适用于固定用户,例如用户个人消息通道、确定用户之间的对话通道,一旦需要动态用户访问频道,此频道类型就不合适了。