WebSockets: Как уведомить всех подписчиков, когда обрывается соединение с клиентом? - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть небольшая демоверсия чата WebSocket, над которой я работаю ( на основе этого кода ). Тем не менее, часть, которая не работает, - это когда соединение между клиентом и сервером закрыто, я хочу уведомить всех подписчиков, что пользователь «покинул чат». Я думал, что сервер будет уведомлен / запустит функцию 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 Ответ

1 голос
/ 07 ноября 2011

Вы пытаетесь отправить данные в только что закрытый 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

Таким образом, сообщение будет отправлено всем подписчикам.

С уважением

Тобиас

...