wait what? custom websockets mit javascript im browser? okay man lernt nie aus XD
wait what? custom websockets mit javascript im browser? okay man lernt nie aus XD
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
hab ne ganz interessante Webseite dazu gefunden: http://enterprisewebbook.com/ch8_websockets.html
Ich muss also, bevor ich die Kommunikation beginnen kann erst mal einen Schlüssel bearbeiten und dann zurückschicken...
Mein Programm um das zu testen sieht momentan so aus:
Leider bekomme ich nicht den gleichen Accept Schlüssel zum zurückschicken raus wie im Beispiel auf der Seite...Code:import hashlib import base64 MAGIC = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" HSHAKE_RESP = "HTTP/1.1 101 Switching Protocols\r\n" + \ "Upgrade: websocket\r\n" + \ "Connection: Upgrade\r\n" + \ "Sec-WebSocket-Accept: %s\r\n" + \ "\r\n" data = "GET HTTP/1.1\r\n" + \ "Upgrade: websocket\r\n" + \ "Connection: Upgrade\r\n" + \ "Host: echo.websocket.org\r\n" + \ "Origin: http://www.websocket.org\r\n" + \ "Sec-WebSocket-Key: i9ri`AfOgSsKwUlmLjIkGA==\r\n" + \ "Sec-WebSocket-Version: 13\r\n" + \ "Sec-WebSocket-Protocol: chat\r\n" print("HSHAKE_RESP: ", HSHAKE_RESP) print("data: ", data) headers = {} lines = data.splitlines() for l in lines: parts = l.split(": ", 1) if len(parts) == 2: headers[parts[0]] = parts[1] headers['code'] = lines[len(lines) - 1] key = headers['Sec-WebSocket-Key'] print("key: ", key) combi = key + MAGIC; combi_b = combi.encode('UTF-8') print("combi: ", combi) #print("combi_b: ", combi_b) resp_data = HSHAKE_RESP % ((base64.b64encode(hashlib.sha1(combi_b).digest()),)) print("resp_data: ", resp_data)
Die schicken den Key: i9ri`AfOgSsKwUlmLjIkGA== an das Serverscript und bekommen dann, wenn sie es mit dem "special globally unique identifier (GUID) string 258EAFA5-E914-47DA-95CA-C5AB0DC85B11" bearbeitet haben das raus: Qz9Mp4/YtIjPccdpbvFEm17G8bs=
Ich bekomme aber das raus: ti16O6oiN0nzWbVtqq9omKeAd/Y=
warum ? Kann mir einer helfen ? Ich habe ja schließlich nichts groß verändert, sondern den Code fast von da ganz unten übernommen : http://stackoverflow.com/questions/1...ing-to-python#
Du kannst einen Webserver davor schalten, und nur gewissen krams weiterleiten.Das was shedepe beschreibt, hört sich doch schon mal gut an. Werde ich auf jeden Fall drüber nachdenken. Momentan habe ich das nämlich noch nicht durchblickt... Einen Nachteil sehe ich dabei aber. Es würde nicht mehr so einfach sein mehrere Webseiten mit unterschiedlichen Dingen zu basteln. Die Webseiten brauchen ja auch noch CSS und so...
Ich möchte erst mal noch ein bisschen probieren, ob ich die TCP Lösung hinbekomme, wenn nicht, dann komme ich auf diesen Ansatz zurück.
Btw:
Meine Erfahrung mit Webseiten die Roboter steuern war in der Vergangenheit meistens von solcher Natur, dass der Roboter irgendwann an einer Wand geklebt ist, weil man einen verdammt hohen Delay haben kann.
Ich glaube, dass ich die Tage dann doch mal deine Lösung ausprobieren werde...
Ich saß heute bestimmt den halben Tag daran, herauszufinden, warum auf einmal mein Javascript nicht mehr ging, obwohl ich nichts daran seit gestern gemacht hatte. Dann bin ich mal auf die Idee gekommen die Broserdaten(Cache) zu löschen und auf einmal ging es wieder... kein Plan warum ?? Dachte schon, dass mir der Raspberry einen Aprilscherz spielen wollte
Jetzt bekomme ich schon mal wenigstens die Verbindung so hin, dass die Verbindung Clientseitig wieder angenommen wird (connection.onopen...)
Nur das mit den Nachrichten klappt noch nicht, weil ich gerade gemerkt habe, dass nicht direkt die Daten mit xyz.encode verschickt werden, sondern die Daten in Frames transportiert werden...
Wenn man z.B. das Wort "Pingen" mit connection.send mit dem Javascript verschickt zeigt mir Python das an: b'\x81\x860og\x80\x1f\x06\t\xe7*\x01' Wie ich das decodieren soll weiß ich noch nicht wirklich...
Zu der Sache mit dem Delay: Ich möchte es ja wenigstens mal probierenDie meiste Zeit soll der Robi eh autonom unterwegs sein...
Lesezeichen