WebSockets:如何在客户端连接断开时通知所有订户?

时间:2011-11-03 17:23:09

标签: ruby websocket eventmachine em-websocket

我正在进行一些WebSocket聊天演示(based on this code)。但是,似乎没有工作的部分是当客户端和服务器之间的连接关闭时,我想通知所有订户用户已“离开聊天室”。我认为当客户端连接被删除时,服务器会被通知/运行onclose函数,但也许这不是WebSockets的工作方式。

这是我的EventMachine代码:

  ws.onclose do
    puts "Connection closed"
    ws.send ({:type => 'status', :message => "#{@subscribers[subscriber_id]} has left the chatroom"}.to_json)
    @main_channel.unsubscribe(subscriber_id)
  end

1 个答案:

答案 0 :(得分:1)

您正在尝试将数据发送到刚刚关闭的WebSocket,这将无法正常工作。您可能只想将消息推送到队列,如:

ws.onclose do
  puts "Connection closed"
  msg = {:type => 'status', :message => "#{@subscribers[subscriber_id]} has left the chatroom"}.to_json
  @main_channel.push(msg)
  @main_channel.unsubscribe(subscriber_id)
end

这样消息就会发送给所有订阅者。

祝你好运

托拜厄斯