我今天发现了ActionCable,我创建了一个非常简单的聊天。现在我想将它添加到我当前的项目中。
何时建立与频道的连接?在我的简单聊天中,我有一个名为Welcome的控制器,它带有一个索引方法和一个名为Demo的通道。在索引页面上,您可以编写/查看消息。我推断当我们访问该应用的任何页面时,我们会自动连接到该频道吗? (如果我没有在connection.rb中添加任何说明)
答案 0 :(得分:2)
加载网页时。
客户端打开与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
方法。