如何知道用户何时与Faye频道断开连接?

时间:2012-06-18 11:03:31

标签: 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) {
    eval(data);
  });
});

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

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

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

我已经查看了Faye's website about monitoring,但目前尚不清楚我应该在哪里放置该代码。

2 个答案:

答案 0 :(得分:6)

事件监控会进入您的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的块中执行任何您喜欢的操作。

答案 1 :(得分:4)

您可能希望绑定到subscribeunsubscribe事件而不是disconnect事件。阅读faye monitoring docs底部的警告字。

这对我来说效果很好:

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

我还建议使用private pub宝石 - 这有助于保护您的王菲应用。