我可以使用通配符附加和订阅频道吗?

时间:2018-04-16 12:15:24

标签: websocket real-time publish-subscribe ably-realtime

通过WebSockets使用Ably作为Pub / Sub时,我可以使用通配符订阅多个频道吗

var channel = ably.channels.get('foo:*') 
channel.attach()

1 个答案:

答案 0 :(得分:1)

附加到频道时,您需要明确提供要附加的频道名称,例如:

var channel = ably.channels.get('announcements')
channel.attach()

无法在单个操作中附加到多个通道,即不支持以下操作:

var channel = ably.channels.get('foo:*') 
channel.attach()
/* attempting to attach to all channels matching the name foo:* will not work */

由于多种原因,这是不可能的:

  • 在单个操作中附加到无限数量的通道将无法扩展您的客户端设备或我们的服务器终止这些连接

  • Ably集群中的频道动态分布在可用资源上并经常移动。每个通道在很大程度上都是自主的,这对于确保系统在没有单点故障或拥塞的情况下保持可靠性非常重要。如果客户端订阅与通配符匹配的所有通道,则需要为群集中可能正在运行通道的每个服务器维护连接,以防创建与该通配符匹配的通道。这不会扩展。

  • 如果您订阅了通配符渠道,则无法提供Ably在渠道上提供的数据传送保证和服务质量,因为:

    1. 在任何时候都没有办法确定地知道客户端实际连接到哪个渠道
    2. 如果客户端设备过载(无法跟上流)或超出速率限制,Ably的服务器必须选择性地开始通过随机通道丢弃消息,以确保客户端可以继续接收消息。应删除哪些邮件?客户如何确定他/她错过了哪些消息?

但是,由于Ably的连接是多路复用的,因此允许您通过同一连接动态地连接和分离任何通道,因此当然可以通过根据需要附加到通道来有效订阅通配符通道。