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的title
和content
与用户在创建后立即查看相关,您可以执行以下操作:
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调用回调函数。 我只会在必要时推荐这个。