#ruby #websocket #eventmachine #em-websocket
#ruby #websocket #eventmachine #em-websocket
Вопрос:
У меня есть небольшая демонстрация чата 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:
Вы пытаетесь отправить данные на веб-сокет, который был только что закрыт, это не сработает. Вероятно, вы хотите просто отправить сообщение в очередь, например:
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
Таким образом, сообщение будет отправлено всем подписчикам.
С наилучшими пожеланиями
Тобиас