【问题标题】:What's the best way to join and leave pubnub channels dynamically动态加入和离开 pubnub 频道的最佳方式是什么
【发布时间】:2023-04-01 10:58:01
【问题描述】:

我正在处理这种聊天类型的场景,需要跟踪存在 -

注意:在这种情况下,每个客户端都将使用 withPresence 设置为 true 的选项进行订阅。

Pubnub 配置- 最大公告设置为 1,所以我依赖间隔事件类型。

phoneA 将向服务器询问频道名称,服务器将生成一个唯一的频道名称(比如说 ch-chat)并返回给 PhoneA。

现在phoneA和server都会将频道添加到他们自己的频道组(cg-phoneA和cg-server)并订阅他们自己的频道组。

PhoneA 与 phoneB 和 phoneC 共享频道名称,它们都将频道添加到自己的频道组 cg-phoneB 和 cg-phoneC。 Bkth B 和 C 也订阅了他们自己的频道组。

现在, 当 phoneA 从自己的频道组 (cg-phoneA) 中删除频道 (ch-chat) 时,服务器不会在间隔事件的离开 uuids 列表中获取 phobeA。但是大约 5 分钟后,服务器收到 phoneA 的超时事件。

我想要什么 - 由于 phoneA 从自己的频道组中删除了频道,因此 phoneA 应该出现在间隔事件的离开列表中,它应该不再订阅它。

【问题讨论】:

标签: chat pubnub


【解决方案1】:

存在模式:通知与间隔

一个问题是您的 Announce Max 设置为 1 将使除 state-change 之外的所有在线状态事件静音。换句话说,您在每个频道的所有时间都处于 Interval 模式。阅读有关Presence Event Modes here 的更多信息。

当频道被添加到频道组时,如果您订阅了频道组,您应该会收到加入事件(如果处于 Announce 模式而不是 IntervalwithPresence: true。不过,请确保您希望接收该频道组中所有频道的在线状态事件。您可以为不需要接收状态事件的频道创建第二个频道组。

管理渠道组

至于管理您的频道组中的频道,请确保只有您的服务器是为所有频道组添加/删除频道的一个。这与您启用 Access Manager 时的安全性有关(并且每个人都应该启用/实施 Access Manager 以保护您的密钥和您的用户)。

Presence Webhook

对于 Presence Webhook,这是您的服务器监控 Presence 事件的最佳方式。不建议您从服务器订阅。扩展到多个服务器实例将是困难/复杂的。这就是 Presence Webhook 存在的原因。并且您的客户端和 POST 直接向服务器发送它需要的任何请求,例如您的“生成新通道”请求。然后你的服务器回复这些帖子,然后publish 客户端订阅的频道的所有进一步更新。

频道命名约定

很高兴您使用“生成的频道名称”(如 UUID 模式),但可以为频道添加前缀以标识它们,从而提供一种通过正则表达式使用模式匹配对它们进行分组的方法。我建议使用“点”,以便您还可以利用 PubNub 通配符功能:

  • PubNub 函数通道绑定
  • 状态 ACL(自定义状态通道行为配置)
  • Access Manager 通配符授予
  • 通配符订阅

例如:

  • chat.4849-ut83-83jd...
  • notify.tuy7-87er-27fn...

注意:频道组的名称中不允许出现“点”,并且没有任何通配符功能。

【讨论】:

  • 感谢详细的解决方案,我意识到 webhook 比订阅服务器上的客户端存在事件更简单且可扩展。现在,我让服务器代表客户端操作通道组,并且 webhook 非常适合异步处理在线状态事件。
猜你喜欢
  • 2013-04-02
  • 1970-01-01
  • 2012-03-24
  • 2022-01-22
  • 2013-02-25
  • 2016-07-31
  • 1970-01-01
  • 2016-12-18
  • 2013-05-14
相关资源
最近更新 更多