2010-07-29 18 views
6

Así que vi esta gran publicación de blog, Experimenting with Node.js. Decidí probar y configurarlo por mi cuenta usando el gist del autor. No funcionó.WebSocket se cierra al enviar

La depuración adicional me muestra que el websocket se conecta bien, pero se está cerrando tan pronto como se invoca 'enviar'. Aquí está la traza Wireshark (valga la separación raro):

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}. 

He intentado esto, tanto en Chrome y Firefox 4.0 beta. Ambos exhiben el mismo comportamiento. Si voy al original blog site, funciona bien.

Otra cosa. Si entro en la consola JS, ya sea en FF o Chrome y hago lo siguiente:

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

Se desconecta inmediatamente y no envía el mensaje. El servidor muestra la conexión y el saludo, pero nunca recibe un mensaje.

He encontrado algunas preguntas aquí que fueron similares pero que se resolvieron sin publicar la solución o que no parecían aplicarse en esta situación. Puedo publicar el código del gist si eso lo hace más fácil.

Respuesta

1

Major headslap. A pesar de creer que tenía instalada la última versión de Node.js, no lo hice. Tengo un par de máquinas con Node.js en ellas. Debí perder la pista. Tenía Node.js v0.1.96. Después de actualizar a v0.1.102, todo está funcionando bien.

¡Lo siento muchachos! :-D

0

Para el problema de la desconexión ocurre cuando se emite el envío desde el navegador, es necesario esperar a que el evento OnOpen para disparar antes de emitir un envío:

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

El CloseEvent tiene un "código "propiedad que le dará información sobre por qué se cerró su conexión.

"Devuelve un corto sin signo que contiene el código de cierre enviado por el servidor. Los siguientes valores son códigos de estado permitidos".

Se admite una variedad de valores de código. Éstos son los más destacados:

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

See CloseEvent API docs on MDN por más.

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/12231080) – dbugger

+0

Muchas gracias por el consejo. ¡Lo tendré en cuenta la próxima vez! –

Cuestiones relacionadas