Rails pub/sub 与 faye

2024-04-12

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

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

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

Like so:

应用程序/模型/post.rb

class Post
    include Mongoid::Document

    after_create :notify_subscribers

    private
    def notify_subscribers
        Faye::Client.publish("/posts")
    end
end

应用程序/视图/帖子/index.html.erb

<%= subscribe_to(posts_url) do %>
   uhh what do I do here? ajax call to refresh the whole page??
<% end %>

那么直接从 after_create 回调发布通知是一个好主意吗 当我从 Faye 服务器收到消息时,如何实施“更新”? 我是否只需执行 AJAX 调用即可从服务器重新加载数据?这样看来会很慢。

此外,我想使用类似的东西来更新模型(假设用户添加了一些评论或作者更改了内容),因此一直对数据库进行攻击似乎不是一个好的计划......


首先,是的,发布通知after_create很好。你应该在你的notify_subscribers方法是在客户端中发布您要使用的新帖子的所有相关信息,以便您don't收到通知后必须发出另一个不必要的 AJAX 请求。

因此,举例来说,如果title and content帖子的内容与用户在创建后立即查看相关,您可以执行以下操作:

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

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

<script type="text/javascript">
$(function() {
  var client = new Faye.Client('http://localhost:3000/faye');
  client.subscribe("/posts/new", function(data) {
    /* do whatever you need with data */
  });
});
</script>

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails pub/sub 与 faye 的相关文章

随机推荐