我有一个基于API的rails应用程序,使用pub-nub v4。使用pub-nub的客户端(IOS / Android)也是如此。
以下是我们正在采取的步骤:
1)在创建任何对象时,我们正在订阅两个频道并创建一个listener.here。同时在客户端,我们根据此对象ID订阅两个频道。
2)因此,对于来自IOS端的任何发布,对于在Web端创建多个请求的相同频道,所以将创建多个数据库条目。
以下是订阅和取消订阅的代码示例。
$pubnub.add_listener("broadcast_#{broadcast.id.to_s}")
$pubnub.subscribe("broadcast_#{broadcast.id.to_s},broadcastLikes_#{broadcast.id.to_s}")
$pubnub.publish("broadcast_#{self.id.to_s}", { type: "StopBroadcast", text: text })
$pubnub.remove_listener("broadcast_#{self.id.to_s}")
$pubnub.unsubscribe("broadcast_#{self.id.to_s}, broadcastLikes_#{self.id.to_s}")
任何人都可以帮助我!
答案 0 :(得分:1)
评论中的答案集合:
如果您需要从客户端向服务器发送消息,为什么不发布消息呢?您从服务器订阅所做的一切就是取代传统的Web应用程序POST,这实际上没有任何优势。您应该使用PubNub的部分是另一个方向:服务器到客户端。
问: add_listener在这里扮演什么角色? subscribe和add_listener之间有什么关系?
答:监听器适用于所有频道订阅响应和状态。 您只为所有通道创建单个全局(应用程序级别)侦听器。订阅频道时,发布到该频道的消息将到达收听者。取消订阅频道后,您将不再收到发布到该频道的消息。您可以订阅多个频道,这样您就可以根据需要控制您订阅(收听)的频道。当您取消订阅所有频道时,您将不再收到任何消息。
问: 我怀疑是一个能够同时处理多条消息的全局侦听器,有没有机会错过。我们应该删除这个听众吗?如果是的话那么?而根据新的ruby PubNub v4,它没有显示有关监听器的更多细节,这就是为什么会感到困惑。
A:单个侦听器设计模式不会遗漏任何消息。目前没有多个监听器的支持(至少没有开箱即用),但这就是我对多个监听器要求感兴趣的原因。但只要知道单/全局监听器将收到发布到您的应用所订阅的所有频道的所有消息。
问: 那么删除侦听器呢,我们需要这样做吗?如果是,则何时。如果没有那么会有任何问题吗?根据多个侦听器要求,我们可以将每个侦听器与其自己的事件侦听分开,以便减少单个全局侦听器的负载。这可以防止多个回调请求同时进行相同的回调。
答:你真的不需要做removeListener。但是,如果你没有在应用程序中完成PubNub,你可以调用它来清理一点内存(尽管很少)。我向你保证,你可以毫无问题地使用单一的监听器。它不会超载。监听器是多线程/线程安全的,否则PubNub根本不会工作(或以理想的方式)。