Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何知道用户何时从Faye频道断开连接?_Ruby On Rails_Ruby On Rails 3_Heroku_Faye - Fatal编程技术网

Ruby on rails 如何知道用户何时从Faye频道断开连接?

Ruby on rails 如何知道用户何时从Faye频道断开连接?,ruby-on-rails,ruby-on-rails-3,heroku,faye,Ruby On Rails,Ruby On Rails 3,Heroku,Faye,我正在尝试使用Faye用Rails构建一个简单的聊天室,并将其托管在heroku上。到目前为止,我已经能够让Faye服务器运行,并让即时消息正常工作。我使用的关键代码行有: 页面加载时启动的Javascript文件: $(function() { var faye = new Faye.Client(<< My Feye server on Heoku here >>); faye.subscribe("/messages/new", function(data)

我正在尝试使用Faye用Rails构建一个简单的聊天室,并将其托管在heroku上。到目前为止,我已经能够让Faye服务器运行,并让即时消息正常工作。我使用的关键代码行有:

页面加载时启动的Javascript文件:

$(function() {
  var faye = new Faye.Client(<< My Feye server on Heoku here >>);
  faye.subscribe("/messages/new", function(data) {
    eval(data);
  });
});
$(函数(){
var faye=新faye.Client(>);
订阅(“/messages/new”,函数(数据){
评估(数据);
});
});

create.js.erb,当用户发送消息时触发

<% broadcast "/messages/new" do %>
  $("#chat").append("<%= j render(@message) %>");
<% end %>

$(“#chat”)。追加(“”);

一切正常,但现在我想在用户断开聊天连接时发出通知我应该怎么做?


我已经看过了,但不清楚应该把代码放在哪里

事件监视将进入您的rackup文件。下面是我在生产中使用的一个示例:

Faye::WebSocket.load_adapter('thin')
server = Faye::RackAdapter.new(mount: '/faye', timeout: 25)

server.bind(:disconnect) do |client_id|
  puts "Client #{client_id} disconnected"
end

run server

当然,您可以在传递给
#bind
的块中执行任何您喜欢的操作。您可能希望绑定到
subscribe
unsubscribe
事件,而不是
disconnect
事件。读一下报纸底部的警告语

这对我来说很有效:

server.bind(:subscribe) do |client_id|
  # code to execute
  # puts "Client #{client_id} connected"
end

server.bind(:unsubscribe) do |client_id|
  # code to execute
  # puts "Client #{client_id} disconnected"
end

我还建议使用gem-这将有助于保护您的faye应用程序。

谢谢您的帮助,但这会使我的应用程序在本地和heroku上崩溃。错误只是说方法“bind”不存在:'config.ru:24:in
block in:undefined method
bind'for#(NoMethodError)'检查您正在使用的Faye gems的版本。上面的代码肯定适用于faye 0.8.2和faye websocket 0.4.5。您可以发布到给定的频道吗?我试过了,但我只是
[ERROR][Faye::RackAdapter]超时::ERROR