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);
}