Rails 5 ActionCable何时启动连接?

时间:2016-09-19 18:30:49

标签: ruby-on-rails ruby actioncable

我今天发现了ActionCable,我创建了一个非常简单的聊天。现在我想将它添加到我当前的项目中。

何时建立与频道的连接?在我的简单聊天中,我有一个名为Welcome的控制器,它带有一个索引方法和一个名为Demo的通道。在索引页面上,您可以编写/查看消息。我推断当我们访问该应用的任何页面时,我们会自动连接到该频道吗? (如果我没有在connection.rb中添加任何说明)

1 个答案:

答案 0 :(得分:2)

简短回答

加载网页时。

Long anwser

客户端打开与actioncable频道的连接。根据客户端部分的文档:

http://edgeguides.rubyonrails.org/action_cable_overview.html#client-side-components

当您加载网页时(在您的情况下,欢迎控制器的索引操作),这样的javascript将执行:

// app/assets/javascripts/cable.js
//= require action_cable
//= require_self
//= require_tree ./channels

(function() {
  this.App || (this.App = {});

  App.cable = ActionCable.createConsumer();
}).call(this);

之后是订阅功能,例如:

# app/assets/javascripts/cable/subscriptions/chat.coffee
App.cable.subscriptions.create { channel: "ChatChannel", room: "Best Room" }

这就是打开与您定义的频道的连接(如本例中的服务器端频道部分):http://edgeguides.rubyonrails.org/action_cable_overview.html#channels

# app/channels/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
  # Called when the consumer has successfully
  # become a subscriber of this channel.
  def subscribed
  end
end

当客户端javascript订阅时,连接最终将导致您的频道对象的subscribed方法。