微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态加入和离开 pubnub 频道的最佳方式是什么

如何解决动态加入和离开 pubnub 频道的最佳方式是什么

我正在研究这种聊天类型的场景,需要跟踪状态 -

注意:此场景中的每个客户端都将订阅选项 withPresence 设置为 true。

Pubnub 配置- Maxannounce 设置为 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 从它自己的频道组中删除了频道,它不可能再订阅它了。

解决方法

呈现模式:公告与间隔

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

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

管理频道组

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

状态网络钩子

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

频道命名约定

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

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

例如:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。