android - 在发布时获得多个相同的请求 pubnubv4 rails

标签 android ios ruby-on-rails ruby-on-rails-4 pubnub

我有一个基于 API 的 Rails 应用程序,使用 pub-nub v4。使用 pub-nub 的客户端(IOS/Android)也是如此。

以下是我们正在执行的步骤:

1) 在创建任何对象时,我们订阅两个 channel 并创建一个监听器。同时在客户端,我们根据此对象 ID 订阅两个 channel 。

2) 因此,对于从 IOS 端发布的相同 channel 的任何发布,在 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}")

任何人都可以帮助我!

最佳答案

评论中的答案合集:

如果您需要从客户端向服务器发送消息,为什么不直接 POST 呢?通过从您的服务器订阅,您所做的就是替换传统的网络应用程序 POST,这并没有真正提供任何优势。您应该使用 PubNub 的部分是另一个方向:服务器到客户端。

问: 这里add_listener的作用是什么? subscribe 和 add_listener 是什么关系?

A:监听器用于所有 channel 订阅响应和状态。 您只需为所有 channel 创建一个全局(应用程序级别)监听器。当您订阅 channel 时,发布到该 channel 的消息将到达监听器。当您取消订阅某个 channel 时,您将不会再收到发布到该 channel 的消息。您可以订阅许多 channel ,因此您可以根据需要控制订阅(收听)哪些 channel 。当您取消订阅所有 channel 时,您将不会再收到消息。

问: 我怀疑单个全局监听器是否能够同时处理多个消息,是否有可能遗漏。我们是否应该删除这个监听器?如果是那么什么时候?根据新的 ruby​​ PubNub v4,它没有显示有关监听器的更多详细信息,这就是为什么会感到困惑。

答:单监听器设计模式不会错过任何消息。当前不支持多个监听器(至少不是开箱即用的),但这就是我对多个监听器要求感兴趣的原因。但只要知道单个/全局监听器将接收发布到您的应用订阅的所有 channel 的所有消息。

问: 关于移除监听器,我们需要这样做吗?如果是那么什么时候。如果没有那会有什么问题吗?根据多个监听器的要求,我们可以将每个监听器与自己的事件监听器分开,这样可以减少单个全局监听器的负载。这是为了防止多个回调请求同时触发同一个回调。

答:您真的不需要执行 removeListener。但是,如果您没有在应用程序中使用 PubNub,您可以调用它来清除一点内存(虽然很少)。我向您保证,您可以毫无问题地使用单个监听器。它不会重载。监听器是多线程/线程安全的,否则 PubNub 根本无法工作(或以理想的方式)。

关于android - 在发布时获得多个相同的请求 pubnubv4 rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38831258/

相关文章:

android - 测量 Android 应用启动时间

android - 以编程方式为按钮问题设置选择器

iphone - NSDateFormatter 关闭一小时

ios - 未收到NSNotification

ruby-on-rails - SerializationError Rails ActiveJob 时间和日期

ruby-on-rails - 添加用户的名字以设计确认电子邮件模板

html - 如何禁用电子邮件链接?

android - 启动 Activity 时停止应用程序进入前台

android - 带有嵌套导航图的 Arch 新导航组件

iOS:获取不在 drawRect 中的 CGMutablePath:并将其分配给 CAShapeLayer 的路径