我正在进行一些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
答案 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
这样消息就会发送给所有订阅者。
祝你好运
托拜厄斯