2015-08-06 2 views
4

У меня есть этот простой яваскрипта код:близко не похоже на работу с 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(), сервер ничего не получает, но когда я перезагружаю страницу, она печатает сообщение.

Есть ли способ заставить клиента сказать, что соединение закрыто?

+0

Как клиентская, так и код сервера отлично работают на моей машине (работая на сервере MacOS с Ruby 2.2.2 и используя сафари в качестве клиента websocket) ... хотя в коде отсутствует одно ключевое слово 'end' и 'Websocket.new.run' в конце. – Myst

+0

Странно ... Я исправил недостающий конец. Это ошибка копирования/вставки. Можете ли вы попробовать с firefox или chrome? Благодарю. – Dougui

+0

Работает для меня также с Chrome и Firefox (Chrome настаивал, что я бы попробовал его только при посещении сайта «небезопасного», поскольку соединение с websocket не было зашифровано) ... ваш веб-сайт печатает строку «hello», когда событие сообщения уволено? – Myst

ответ

0

Я отправляю этот ответ, так как проблема была обнаружена как связанная с использованием «Докера», и был опубликован новый вопрос, связанный с фактической проблемой.

Этот ответ должен (надеюсь) правильно отметить этот вопрос, поскольку он больше не нуждается в внимании, чтобы сообщество могло сосредоточиться на неотвеченных вопросах.

См. Комментарии к вопросу для получения более подробной информации.

Смежные вопросы