上下文
我们正在使用PubNub进行实时通信的聊天应用程序。
PubNub允许单个频道组中的2000个频道,之后您可以通过连接订阅最多10个组。
我们目前遇到的问题是我们的后端需要订阅每个现有的通道(通过组),因为我们有一个对命令做出反应的Bot。
我们在node.js中处理这种连接,但是当向一个组添加频道时,当使用channel_group_add_channel
添加超过2000个频道时,PubNub不会出错,而是返回200响应,并且只取出一个前一个频道(不确定是哪个)。
因此,我需要检查组中当前的通道数,以及它是否已满 - 启动一个新组。
问题:
我们可以同时进行多个用户注册,这意味着我们的机器人需要订阅新增的频道。
用于检查我们是否可以向当前组添加更多频道的伪代码。
addChannel(channel) {
group.canAdd()
.then(group.add(channel));
}
canAdd
会使用channel_group_list_channels
来检查当前群组中有多少个频道。由于javascript的异步性质,我们有竞争条件:
addChannel
channel_group_list_channels
的两次调用都可以返回1999频道我们有办法在不降低性能的情况下解决这个问题吗?
请注意,即使像Redis这样的计数器也会遇到同样的问题,因为问题是并发性。
答案 0 :(得分:1)
真正的问题是关于订阅服务器上的数千个频道,但函数被提出作为解决方案,促使提问者提及使用聊天机器人。
这个问题早该回答...... PubNub Functions已经存在超过一年了,当您可以使用任何聊天机器人服务时,构建聊天机器人很简单:IBM Watson,Gupshup和so many others out there。
PubNub功能允许您点击消息并对其进行更改,编码,拒绝,重定向,无论您需要做什么,因为消息通过PubNub网络飞行而无需命中您的服务器(s )。您只需在Function模块中实现一些代码,这些代码将根据不同的消息传递事件在PubNub网络中执行:发布,在线,您甚至可以设置endpoints。
有关创建聊天机器人的更多资源:
答案 1 :(得分:0)
由于相同的原因(以及其他几个原因),我们的团队最终拒绝使用PubNub频道。
我们的简短故事:
我们有使用PubNub的NodeJS组件。随着时间的流逝,我们的组件会订阅越来越多的PubNub频道(每天约400个)。 1-2天后,由于组件停止工作,我们不得不重新启动它。事实证明,经过一定数量的频道后,一个PubNub实例刚刚停止工作。 因此,我们查看了PubNub频道,我们面临着同样的比赛条件问题。我们还发现了PubNub组SDK的奇怪行为。例如,一个呼叫中添加的频道不能超过1800个,您必须进行2个呼叫(例如,第一个呼叫1700个,第二个呼叫+ 300个)。 WTF? Docs说您最多可以添加2000个频道。
相反,我们实现了PubNub实例池,每个实例最多描述100个通道。而且效果很好。不建议使用这种方法,但是如果没有选择,您还应该怎么做?