ruby-on-rails - rails 5 中 broadcast 、 broadcast_to 和 broadcast_for 的区别

标签 ruby-on-rails ruby ruby-on-rails-5

来自Rails Guide我发现以下三个代码片段

ActionCable.server.broadcast("chat_#{params[:room]}", data)

这个简单的广播将数据发送到特定的聊天室

而如下所示的 broadcast_to 似乎将数据发送到当前用户订阅的 channel 内的所有聊天室。

WebNotificationsChannel.broadcast_to(
  current_user,
  title: 'New things!',
  body: 'All the news fit to print'
) 

这是另一种类型的广播broadcast_for - 我找不到任何例子。

我的问题是这三者之间的实际区别是什么以及何时使用它们中的每一个 - 提前致谢

最佳答案

broadcasting_for 返回一个可以重复使用的对象。这对于在代码/时间的不同点向同一个房间发送多条消息很有用。 broadcast 最终调用了 broadcasting_for,所以基本上是一样的。

broadcast_to 来自 channel 类。您可以在创建 channel 后使用它。假设您要通知博客帖子评论的所有订阅者。那么您的 channel 将类似于示例:

class CommentsChannel < ApplicationCable::Channel
  def subscribed
    post = Post.find(params[:id])
    stream_for post
  end
end
# use CommentsChannel.broadcast_to(@post, @comment)

但是如果您想向特定用户发送更多定向消息,那么您可以使用一个名为 EmailNotifications 的类,它只关心特定用户。

class EmailNotificationsChannel < ApplicationCable::Channel
  ...

EmailNotificationsChannel.broadcast_to(
  current_user,
  title: 'You have mail!',
  body: data[:email_preview]   # some assumption of passed in or existing data hash here
)

关于ruby-on-rails - rails 5 中 broadcast 、 broadcast_to 和 broadcast_for 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806862/

相关文章:

ruby - 检测 USB 设备连接/分离并发送电子邮件

ruby-on-rails - 如何在 Ruby 中轻松过滤 CSV 数据

ruby-on-rails - Rails 管理员与 Devise 管理员用户不适用于仅 API 应用程序

ruby-on-rails - 序列化程序中的 ENOENT 错误

ruby-on-rails - 使用 'taps' gem 在 Windows 上将 SQLite3 迁移到 PostgreSQL 时出现 CantOpenException

ruby-on-rails - Spree Commerce 安装错误,Bundler 找不到 gem "rails"的兼容版本

ruby-on-rails - 为 heroku run rake、heroku run console 等关闭 NewRelic

ruby - 为什么我不能在Integer类中覆盖self?

arrays - 字符串中给定数量的字符的精确匹配

ruby-on-rails - `form_for` 绕过模型访问器。如何让它停止? (或 : How to make a custom attribute serializer? )