2009-09-20 11 views
11

Ich habe von der Web-Sockets-Schnittstelle in der HTML-Datei-Spezifikation von einer relevanten Frage here gehört.
Es klingt sehr vielversprechend!
Ich verstehe nicht, wie es funktioniert, verwendet es immer noch das HTTP-Protokoll und arbeitet um es herum oder funktioniert es so etwas wie TCP-Sockets?Wie funktioniert das HTML5 Web Sockets Interface?

Antwort

2

Das Web Socket-Protokoll ist ein TCP-basiertes Protokoll, aber es ist ein Downgrade auf HTTP geplant. Es gibt auch einen HTTP-Handshake, der den Server auffordert, auf das Web-Sockets-Protokoll zu aktualisieren. Wenn der Server dies unterstützt, wird eine Duplex-TCP-Verbindung verwendet, andernfalls wird auf HTTP und die Comet-Hacks zurückgegriffen.

+0

Das letzte Mal, als ich die WebSocket-Protokollspezifikation sah, gab es keine Möglichkeit zum automatischen Downgrade auf HTTP. Wo wurde das hinzugefügt? – EricLaw

+0

WebSockets (früher?) Unterstützen NTP, ein Protokoll, das in den 80er Jahren geschlossen wurde. – Christian

7

Es ist nicht HTTP, noch ist es reine TCP-Sockets. Es wurde entwickelt, um den geringen Overhead von normalen Socket-Verbindungen (AJAX/COMET ist ein sehr hoher Overhead) zu erreichen, ohne jedoch einige der in den letzten Jahren entwickelten Browser-Sicherheitsprinzipien zu opfern.

Der anfängliche WebSockets-Handshake sieht sehr nach HTTP aus. Dies wird es für bestehende HTTP-Proxies und Web-Server erleichtern, eingehende WebSockets-Verbindungen zu unterstützen und das Richtige mit ihnen zu tun (d. H. Sie an den echten Handler weiterzuleiten). Aber nach einem erfolgreichen Handshake (der den Austausch und die Validierung von Ursprungsinformationen beinhaltet) bleibt die Verbindung offen und wird bidirektional.

Jedes Datenpaket (ob vom Server oder vom Client gesendet) beginnt mit einem '\ x00' (Nullbyte), gefolgt von UTF-8-codierten Daten und endet mit einem '\ xff' (alle Einsenbyte)).

Der Standard aktuelle Entwurf ist hier: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76

Sie könnten auch die wsproxy in noVNC enthalten finden als Referenz nützlich zu sein. wsproxy ist ein generischer WebSockets-zu-TCP-Socket-Proxy. Es gibt sowohl eine C- als auch eine Python-Version von wsproxy, die in noVNC enthalten sind.

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

22

In gewisser Weise ist es sowohl eine HTTP-Anforderung und ein regelmäßiger TCP-Socket.

Eine Websocket-Verbindung wird mit einer normalen HTTP-Anforderung über TCP angefordert. Es gibt einige gesendete Header, die dem Webserver anzeigen, dass es sich um einen Websocket handelt, der angefordert wird, und nicht um eine normale Seite, aber im Grunde ist es nur eine HTTP-Anfrage.

Nachdem die Antwort vom Server gesendet wurde, wird die Verbindung aktualisiert. Das heißt, die TCP-Verbindung, die für HTTP verwendet wurde, wird für einen höheren Aufruf gehandelt: bidirektionale Echtzeit-Datenübertragung.

Sobald Sie die Fähigkeit haben bidirektional und effizient kommunizieren (was ist der größte Sieg über Kometen), ist der Horizont der Entwickler erheblich erhöht. Plötzlich werden Dinge wie MMO-Spiele und Echtzeit-Collaboration möglich, die mit Web-Technologien nicht möglich waren.

+0

Frage: ist es GENAU wie Openning HTTP-Anfrage und offen bleiben? (wie Komet lange Umfrage ...)? oder ist es etwas anderes –

+0

@RoyiNamir, Ja, genau das gleiche, geben oder nehmen Sie ein paar Header, außer dass Sie nicht jedes Mal eine neue Verbindung öffnen müssen, wenn Sie etwas senden oder empfangen möchten. –

+0

Danke. also tue es eigentlich echt push .... oder? (und keine Antwort auf eine Anfrage ...) –

0

In einer solchen Situation die Rolle des Servers kommt, wenn: (. 2-Wege-comm)

In HTML 5, WebSocket wie ein fone nicht Walky-Talky. HTTP-Protokoll wurde auf Websocket-Protokoll aktualisiert. (wss:// from ws://) SERVER sollte in der Lage sein, Duplex-Kanal zu öffnen und daher mit Duplex-Kommunikation einverstanden zu sein. Bitte gehen Sie auch über diesen Link: http://www.html5rocks.com/en/tutorials/websockets/basics/

Vielen Dank.