Havyrl: Websocket Handshake

Hallo,

ich habe ein kleines Problem mit einer der neuen WebTechnologien. Genauergesagt den Websockets.
Ich weiß leider nicht ob das hier das richtige Forum ist, jedoch ist mir kein besseres deutschsprachiges Forum eingefallen.

Ich habe mit Hilfe der RFCs und vieler Beispiele den Websocket Handshake per Javascript (Node.js) nachgebaut.
Ich habe die Beispiele der RFCs und auch vieler anderer Publikationen mit meinem Script durchrechnen lassen und bin zum selben Ergebnis gekommen.

Trotz der aus meiner Sicht richtigen Antwort an den Browser beendet dieser immer die Verbindung bevor sie richtig aufgebaut wurde.

Ein Timeout ist hierbei auszuschließen, da wenn ich gar nichts sende, er auch nicht die Verbindung abbricht.

Der Handshake:
Ich habe die Zeichenketten für den key3 und den response code als numerischer Wert dargestellt, damit nichts verloren geht.
Und \r\n => ist natürlich der Zeilenumbruch 10 13 .

14 Feb 12:49:25 - EOH connect

14 Feb 12:49:25 - ****Incoming****
GET / HTTP/1.1\r\n
Upgrade: WebSocket\r\n
Connection: Upgrade\r\n
Host: 77.37.15.94:8899\r\n
Origin: http://77.37.15.94\r\n
Sec-WebSocket-Protocol: sample\r\n
Sec-WebSocket-Key1: &OX: 23  99Z  77 1|85 6 <y\r\n
Sec-WebSocket-Key2: 4  i  Y2{2^     64c  UO1A0\ ~k08\r\n
\r\n
#6e #57 #af #4b #70 #8b #dd #de\r\n

14 Feb 12:49:25 - ****Outgoing****
HTTP/1.1 101 Web Socket Protocol Handshake\r\n
Upgrade: WebSocket\r\n
Connection: Upgrade\r\n
Sec-WebSocket-Origin: http://77.37.15.94\r\n
Sec-WebSocket-Location: ws://77.37.15.94:8899/\r\n
Sec-WebSocket-Protocol: sample\r\n
\r\n
#ac #68 #61 #e3 #d2 #6c #13 #c8 #62 #21 #f1 #d0 #cd #c9 #d1 #ff\r\n

14 Feb 12:49:25 - EOH end

Browser: Alle verfügbaren (Chrome, Safari)
Testseite: http://77.37.15.94/
Server: http://77.37.15.94/server/example.js
Log: http://77.37.15.94/server/server.log.htm  (musste es htm nennen, sonst will er immer speichern... ist aber nur eine Textdatei also einfach quelltext öffnen ;) )

  1. Hallo,

    ich habe von den Websockets-Interna keine Ahnung, ich weiß nur, dass es verschiedene Drafts des Protokolls gibt und die Browserimplementationen sich auf verschiedene Versionen beziehen.

    Anstatt die Serverseite selbst zu implementieren, würde ich vorhandene node.js-Bibliotheken wie http://socket.io/ nutzen. Diese sind m.W. recht robust (soweit man das im Kontext von node.js + Websockets behaupten kann). Oder hat es einen spezifischen Grund, wieso du es selbst implementieren willst?

    Wenn du Leute suchst, die sich mit dem Protokoll auskennen, frage auf HyBi. Das ist die Arbeitsgruppe, die am Websockets-Standard arbeitet.

    Mathias

    1. Hallo,

      Hallo

      ich habe von den Websockets-Interna keine Ahnung, ich weiß nur, dass es verschiedene Drafts des Protokolls gibt und die Browserimplementationen sich auf verschiedene Versionen beziehen.

      Das habe ich auch herausgefunden, jedoch ist die Version korrekt.
      Gotseidank unterscheiden sich die beiden infrage kommenden unterschiedlichen Versionen so sehr, das sie leicht zu Identifizieren sind.

      Anstatt die Serverseite selbst zu implementieren, würde ich vorhandene node.js-Bibliotheken wie http://socket.io/ nutzen. Diese sind m.W. recht robust (soweit man das im Kontext von node.js + Websockets behaupten kann). Oder hat es einen spezifischen Grund, wieso du es selbst implementieren willst?

      Ja, da gibt es mehrere.
      1. Ich schreibe derzeit an einer komplexe Applikation und möchte meine eigenen Strukturen verwenden um mein Fehlersuch- & Wartungsaufwand in Grenzen zu halten.
      2. Ist die Technologie sehr neu. Niemand weiß ob eine Bibliothek ein neues "jQuery" wird oder der Autor übermorgen keine Zeit mehr für dieses Projekt hat.
      3. Ich möchte es verstehen. Ich möchte die Möglichkeit haben bei Problemen diese selbst zu lösen können und nicht auf eine neue Version vom Bibliothek-Autor warten müssen.

      Aber socket.io ist ein gutes Beispiel für einen weiteren Punkt. Es enthält z.b. ein Flash-Fallback. Einerseits möchte ich auf Plugins verzichten, aber was viel wichtiger ist, die Anwendung wird auch ohne Flash genug Ressourcen brauchen und möchte diesen Verbrauch nicht noch weiter durch Flash steigern.
      Die andere alternative sind "Ajax-Longpolls" und diese möchte ich meinem Server auf Dauer nicht zumuten.

      Wenn du Leute suchst, die sich mit dem Protokoll auskennen, frage auf HyBi. Das ist die Arbeitsgruppe, die am Websockets-Standard arbeitet.

      Ist vermutlich eine gute Idee. Danke für den Hinweis.

      Mathias

      Havyrl