2010-06-29 6 views
1

Quelqu'un a-t-il lu le protocole Hickson de 2010 projet-hixie-thewebsocketprotocol-76 WebSocket?HTML5: dernières WebSockets

Voici la source d'un fichier .htm:

<html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <script type="text/javascript"> 
     var socket = new WebSocket('ws://localhost:8181/websession'); 
     socket.onopen = function() { 
      alert('handshake successfully established. May send data now...'); 
     }; 
     socket.onclose = function() { 
      alert('connection closed'); 
     }; 
    </script> 
</head> 
<body> 
</body> 
</html> 

Si j'ai un port TCP en écoute sur 8181, c'est la demande que je reçois quand je charge le fichier .htm ci-dessus dans Chrome:

GET /websession HTTP/1.1 
Upgrade: WebSocket 
Connection: Upgrade 
Host: localhost:8181 
Origin: null 
[\n] 

(où [\ n] est le caractère CRLF.)

Que dois-je retourner à cette poignée de main ouvre? projet-hixie-thewebsocketprotocol-76 spectacles:

HTTP/1.1 101 WebSocket Protocol Handshake 
Upgrade: WebSocket 
Connection: Upgrade 
Sec-WebSocket-Origin: http://example.com 
Sec-WebSocket-Location: ws://example.com/demo 
Sec-WebSocket-Protocol: sample 

8jKS'y:G*Co,Wxa- 

Cette réponse provoque socket.onclose au feu bien.

Répondre

2

Projet 76 rebaptisé les en-têtes de réponse WebSocket- à Sec-WebSocket-, et a ajouté une tête Key inutilement laid et demande corps trucs Crypto auquel le 8jKS'y:G*Co,Wxa- est une réponse. Mais ce n'est que la réponse correcte pour l'exemple inclus dans le projet; ce n'est pas bon de retourner cette chaîne spécifique pour toute autre requête. Voir this post pour une explication sur la façon d'implémenter le nouveau protocole. Dans tous les cas, à moins que vous n'utilisiez les dernières versions de développement, Chrome/Chromium utilisera toujours l'ancien protocole Draft 75 (comme l'illustre la demande affichée) et ne parlera pas au serveur qui met en œuvre le nouveau protocole. Voir le Chromium blog pour plus d'informations. Si vous devez prendre en charge les anciennes versions de Chrome, vous devez implémenter deux protocoles WebSocket.

C'est toujours le risque de développer des choses contre un protocole qui n'est pas encore standardisé. Vous pouvez vous attendre à une interopérabilité ennuyeuse jusqu'à la finalisation de WebSocket; Vous préférerez peut-être attendre jusque-là.

(Essayer de lire réellement la spécification et de déterminer ce qui a changé exactement parmi les innombrables algorithmes d'analyse illisibles est un exercice de frustration.) Je ne sais pas pourquoi c'est écrit comme ça au lieu des spécifications habituelles de type BNF C'est comme si Hixie écrivait un analyseur en C et écrivait ensuite un outil automatisé pour transformer le code en anglais, C aurait été plus lisible TBH.)

0

Vous pourriez trouver le wsproxy inclus dans noVNC comme utile. une référence. Il prend en charge de manière transparente les clients WebSockets v75 et v76. Wsproxy est un proxy de socket WebSockets à TCP générique. Il existe à la fois une version C et python de wsproxy incluse avec noVNC.

http://github.com/kanaka/noVNC/tree/master/utils/

Aussi, juste pour garder les choses intéressantes, la dernière (pas de version encore) projet de proposition modifie les choses à nouveau (en particulier, il modifie la façon dont les choses sont encadrées): http://www.whatwg.org/specs/web-socket-protocol/

Questions connexes