WebSocket закрывается при отправке

Итак, я видел этот отличный пост в блоге,экспериментируя с узлом.js. Я решил попробовать и настроить его самостоятельно, используя авторский суть. Это не сработало.

дальнейшая отладка показывает мне, что websocket подключается нормально, но закрывается, как только вызывается "отправить". Вот трассировка wireshark (простите странный интервал):

GET /test HTTP/1.1

Host: 127.0.0.1:8000

Sec-WebSocket-Key2: 3   j 92 9   62" 7 0 8 8

Upgrade: WebSocket

Connection: Upgrade

Origin: http://127.0.0.1:3000

Sec-WebSocket-Key1: 96'5% S72.93?06



......(bHTTP/1.1 101 WebSocket Protocol Handshake

Upgrade: WebSocket

Connection: Upgrade

Sec-WebSocket-Origin: http://127.0.0.1:3000

Sec-WebSocket-Location: ws://127.0.0.1:8000/test



.4.R....mh.....{.{"action":"move","x":450,"y":22,"w":1146,"h":551}.

Я пробовал это как в Chrome, так и в Firefox 4.0 beta. Они оба ведут себя одинаково. Если я уйду ... к оригинальный блог сайта, он работает нормально.

другое дело. Если я войду в консоль JS в FF или Chrome, и я сделаю следующее:

ws = new WebSocket('ws://localhost:8000/test')
ws.send("foo")

он немедленно отключается и не отправляет сообщение. Сервер показывает соединение и рукопожатие, но никогда не получает сообщение.

Я нашел здесь несколько вопросов, которые были похожи, но были либо решены без публикации исправления, либо не применялись в этой ситуации. Я могу постить код суть если это сделает его проще.

3 ответов


CloseEvent имеет свойство "код", которое даст вам информацию о том, почему ваше соединение было закрыто.

" возвращает короткий без знака, содержащий код закрытия, отправленный сервером. Следующие значения являются разрешенными кодами состояния."

поддерживаются различные значения кода. Вот самые заметные:

  • 1000: CLOSE_NORMAL
  • 1001: CLOSE_GOING_AWAY
  • 1002: CLOSE_PROTOCOL_ERROR
  • 1003: CLOSE_UNSUPPORTED
  • 1005: CLOSE_NO_STATUS

см. CloseEvent API docs на MDN дополнительные.


основные headslap. Несмотря на то, что у меня была последняя версия Node.Яш установлен не. У меня есть пара машин с узлом.js на них я, должно быть, потерял след. У меня был узел.с JS версии v0.1.96. После обновления до v0.1.102, все работает нормально.

Извините, ребята! :- D


для проблемы отключения происходит, когда вы выпускаете отправить из браузера, вам нужно дождаться onopen события для запуска перед выдачей отправить:

var conn = new WebSocket('ws://localhost:8000/test');
conn.onopen = function (e) {
    conn.send('foo');
}
conn.onmessage = function (e) {
    console.log('got: ' + e.data);
}