WebSocket закрывается при отправке - PullRequest
6 голосов
/ 29 июля 2010

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

Дальнейшая отладка показывает, что веб-сокет подключается нормально, но закрывается, как только вызывается «send». Вот след проволочной акулы (простите за странный интервал):

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")

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

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

Ответы [ 3 ]

2 голосов
/ 03 мая 2016

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

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

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

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

Подробнее см. Документацию CloseEvent API на MDN .

1 голос
/ 30 июля 2010

Большой фейерверк.Несмотря на то, что у меня была установлена ​​последняя версия Node.js, я этого не сделал.У меня есть пара машин с Node.js, я, должно быть, потерял след.У меня был Node.js v0.1.96.После обновления до v0.1.102 все работает нормально.

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

0 голосов
/ 14 октября 2010

Чтобы проблема разъединения возникла при отправке отправки из браузера, необходимо дождаться события 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...