У меня есть этот простой яваскрипта код:близко не похоже на работу с WebSocket
window.ws = new WebSocket('ws://127.0.0.1:8000/');
ws.onopen = function() {
ws.send('hello');
}
и сервер в Рубине, как это:
require 'em-websocket'
class Websocket
def run
EventMachine.run do
EM::WebSocket.start(host: '0.0.0.0', port: '8000') do |ws|
ws.onopen do |handshake|
puts "Connected"
end
ws.onclose do
puts "Closed"
end
ws.onmessage do |msg|
p msg
end
end
end
end
end
Когда соединение близко, сервер должен печатать "Закрыто". В браузере, когда я делаю window.ws.close()
, сервер ничего не получает, но когда я перезагружаю страницу, она печатает сообщение.
Есть ли способ заставить клиента сказать, что соединение закрыто?
Как клиентская, так и код сервера отлично работают на моей машине (работая на сервере MacOS с Ruby 2.2.2 и используя сафари в качестве клиента websocket) ... хотя в коде отсутствует одно ключевое слово 'end' и 'Websocket.new.run' в конце. – Myst
Странно ... Я исправил недостающий конец. Это ошибка копирования/вставки. Можете ли вы попробовать с firefox или chrome? Благодарю. – Dougui
Работает для меня также с Chrome и Firefox (Chrome настаивал, что я бы попробовал его только при посещении сайта «небезопасного», поскольку соединение с websocket не было зашифровано) ... ваш веб-сайт печатает строку «hello», когда событие сообщения уволено? – Myst