Rails pub / sub with faye

在Rails应用程序中,我使用Faye(机架适配器)进行推送通知(用于聊天)。

我想将Faye用于另一个用例(更多推送通知),但我似乎无法弄明白。

在我的应用程序中,可以从后台作业创建模型,因此我想在创建模型时刷新我的一个视图(比如索引操作)。

像这样:

应用程序/模型/ post.rb

class Post include Mongoid::Document after_create :notify_subscribers private def notify_subscribers Faye::Client.publish("/posts") end end 

应用程序/视图/职位/ index.html.erb

  uhh what do I do here? ajax call to refresh the whole page??  

那么直接从after_create回调发布通知是一个好主意,当我从Faye服务器收到消息时,如何实现“更新”? 我是否只是进行AJAX调用以从服务器重新加载数据? 这似乎很慢。

此外,我想使用类似的东西来更新模型(比如说用户添加了一些评论或者作者改变了内容)所以一直颠覆数据库似乎不是一个好的计划……

首先,是的,使用after_create发布通知很好。 您应该在notify_subscribers方法中执行的操作是发布有关要在客户端中使用的新post的所有相关信息,以便在收到通知时不必再发出其他不必要的AJAX请求。

因此,例如,如果post的titlecontent与用户在创建后立即查看相关,您可以执行以下操作:

 def notify_subscribers client = Faye::Client.new('http://localhost:3000/faye') client.publish("/posts/new", { 'title' => self.title, 'content' => self.content }) end 

…然后,在视图中,您可能会使用jQuery来使用从服务器收到的有关新post的数据。 Rails代码在这里不会帮到你。 例如,你会这样做(假设你正在使用jQuery并在你的标题中包含faye.js):

  

最后,如果您要传输的信息过于复杂而无法作为通知的一部分进行传输,或者您已经拥有用于更新视图的现有AJAX流程,则可以发布post的ID并在subscribe使用jQuery触发AJAX调用回调函数。 我只会在必要时推荐这个。