2010-07-29 4 views
6

J'ai donc vu ce super blog, Experimenting with Node.js. J'ai décidé d'essayer et de mettre en place par moi-même en utilisant gist de l'auteur. Ça n'a pas marché.WebSocket se ferme sur l'envoi

Un débogage supplémentaire me montre que le websocket se connecte bien, mais se ferme dès que 'send' est invoqué. Voici la trace de Wireshark (pardonnez l'espacement étrange):

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

J'ai essayé ceci dans les deux Chrome et Firefox 4.0 beta. Ils ont tous les deux le même comportement. Si je vais au original blog site, cela fonctionne très bien.

Une autre chose. Si je vais dans la console JS dans les deux FF ou Chrome et je fais ce qui suit:

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

Il déconnecte immédiatement et ne pas envoyer le message. Le serveur affiche la connexion et la prise de contact, mais ne reçoit jamais de message.

J'ai trouvé quelques questions ici qui étaient similaires mais ont été résolues sans poster le correctif ou ne semblaient pas s'appliquer dans cette situation. Je peux poster le code depuis le gist si ça va le rendre plus facile.

Répondre

1

Tête de lit principale. En dépit de croire que j'avais installé la dernière version de Node.js, je ne l'ai pas fait. J'ai quelques machines avec Node.js sur eux, je dois avoir perdu la trace. J'avais Node.js v0.1.96. Après la mise à niveau vers la version 0.1.102, tout fonctionne correctement.

Désolé les gars! :-D

0

Pour le problème de déconnexion qui se passe lorsque vous émettez l'envoi du navigateur, vous devez attendre l'événement OnOpen au feu avant de délivrer un envoi:

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

Le CloseEvent a un « code "propriété qui vous donnera des informations sur la raison pour laquelle votre connexion a été fermée.

"Renvoie un court non signé contenant le code de fermeture envoyé par le serveur Les valeurs suivantes sont des codes d'état autorisés."

Diverses valeurs de code sont prises en charge. Voici les plus importants:

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

See CloseEvent API docs on MDN pour plus.

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De l'avis] (/ review/low-quality-posts/12231080) – dbugger

+0

Merci beaucoup pour le conseil. Je l'aurai en tête la prochaine fois! –