2010-07-29 2 views
6

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

Дальнейшая отладка показывает мне, что websocket подключается нормально, но закрывается, как только вызывается «send». Вот 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 бета. Оба они проявляют одинаковое поведение. Если я иду на original blog site, он отлично работает.

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

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

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

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

ответ

1

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

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

0

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

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

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

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

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

See CloseEvent API docs on MDN больше.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/12231080) – dbugger

+0

Большое спасибо за совет. Я буду иметь это в виду в следующий раз! –

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