12
votes

Comment puis-je déboguer un serveur WebSocket

J'essaie d'écrire un serveur pour une connexion WebSocket. J'ai lu la spécification (76, pas 75) soigneusement. J'utilise le champ Miner comme navigateur.

Lorsque j'essaie de créer une bande Web à partir de JavaScript dans le navigateur: xxx

Le navigateur répond avec "Firefox ne peut pas établir de connexion au serveur à WS: // localhost: 8766 / hoho."

Mon serveur reçoit une demande de main de main de client valide, elle envoie la réponse, puis la flèche.

J'ai exécuté tous les exemples d'exemple de la poignée de main, je peux trouver via mon serveur et je correspond aux réponses données exactement dans chaque instance. Je suis assez confiant que le flux d'octets de retour est correct. Je n'ai pas besoin d'aide pour déboguer mon code, ça fait ce que je veux dire de faire. J'ai besoin d'aide pour déboguer mon utilisation du protocole de la poignée de main de la poignée de main depuis laquelle je pense que je pense que je pense être une réponse correcte, elle se moque de moi.

Ma question est la suivante: Comment puis-je déboguer cette chose? Je peux penser à deux possibilités.

  1. Y a-t-il un moyen d'obtenir le champ de monfield pour me dire pourquoi il rejeter ma poignée de main?

  2. existe-t-il un service de serveur Web de travail, public et Web sur le Web? S'il y a, je peux le proxy, regarder les ruisseaux d'octets dans les deux sens et comprendre où le mien est différent.

    Est-ce que quelqu'un a des idées dans ces directions ou d'autres idées?

    Merci pour toute aide.


3 commentaires

Le Backend Ruby Websocket de Gimite semble maintenant soutenir le 76 brouillon. Vous pourriez donner cela un essai?


Je reçois aussi Firefox ne peut pas établir de connexion au serveur à ... avec "ws: //" et une chaîne non valide ou illégale a été spécifiée "Code:" 12 avec "http: //". Chrome donne une meilleure erreur pour cela (en supposant que c'est le même problème) mauvais schéma d'URL pour Websocket pour "http: //", mais alors un indissique: Code de réponse inattendu: 200 pour "WS: //". Le serveur génère et envoie des résultats.


J'ai réalisé que le code de réponse inattendu : 200 était en réalité correct pour Google Chrome, qu'il devrait être 101. Et les en-têtes que j'étais manquaient ... ( tbray.org/defs/wsock-00#anchor18 )


3 Réponses :


1
votes

Voici un jsfiddle que j'ai fabriqué à partir de http://www.websocket.org serveur Websocket echo qui fonctionne dans Chrome mais pas dans Firefox 6: http://jsfiddle.net/awdlc/

Il est ajusté pour utiliser Mozwebsocket plutôt que sur des sites Web, mais peut-être que cela ne suffit pas?


0 commentaires

2
votes

À propos de la 2e possibilité. Oui, il existe un serveur WebSocket là-bas. Le serveur de démonstration de jwebsocket à http://jwebsocket.org/demos/chat/chat.htm

J'espère que cela aide

Ajouté: Server de socket Echo à l'adresse: http://www.websocket.org/echo.html


0 commentaires

2
votes

Je suis en train de déboguer une situation similaire, et l'outil que je comple sur la plupart est de Netcat, avec une utilisation supplémentaire de OpenSSL. Arrêtez votre serveur Websocket et exécutez NC -L 8766 . Cela vous permet d'enregistrer exactement quels sont les en-têtes envoyés. Tournez le serveur Websocket Retour et utilisez NC 8766 pour coller dans ces mêmes en-têtes et voir le résultat. openssl s_client -connect localhost: 443 vous permettra de faire la demande avec SSL, si cela se trouve dans votre mix.

De là, assurez-vous que les réponses sont entièrement conformes au protocole de la poignée de main WebSocket. Par exemple, mon problème est maintenant que mes réponses ont Connection: Fermer , ce qui n'est pas bon.


0 commentaires