protocole de transfert websocket problème

Je suis à l'aide de python pour mettre en œuvre un simple serveur websocket.
La poignée de main que j'utilise vient de http://en.wikipedia.org/w/index.php?title=WebSockets&oldid=372387414.

La poignée de main lui-même semble fonctionner, mais quand j'ai cliquer sur "envoyer", j'obtiens une erreur javascript:

Erreur non interceptée: INVALID_STATE_ERR: DOM Exception 11

Voici le code html:

<!doctype html>
<html>
    <head>
        <title>ws_json</title>

    </head>
    <body onload="handleLoad();" onunload="handleUnload();">
        <input type="text" id='input' />
        <input type="button" value="submit" onclick="handleSubmit()" />
        <div id="display"></div>

        <script type="text/javascript">
            function showmsg(str){
                display = document.getElementById("display");
                display.innerHTML += "<p>" + str + "</p>";
            }

            function send(str){
                ws.send(str.length);
                ws.send(str);
            }

            function handleSubmit(){
                input = document.getElementById('input');
                send(input.value);
                input.focus();
                input.value = '';
            }

            function handleLoad(){
                ws = new WebSocket("ws://localhost:8888/");
                ws.onopen = function(){
                    showmsg("websocket opened.");
                }

                ws.onclose = function(){
                    showmsg("websocket closed.");
                }
            }

            function handleUnload(){
                ws.close();
            }
        </script>
    </body>
</html>

Et voici le code python:

import socket
import threading
import json

PORT = 8888
LOCATION = "localhost:8888"

def handler(s):

    print " in handler "

    ip, _ = s.getpeername()
    print "New connection from %s" % ip
    request = s.recv(1024)

    print "\n%s\n" % request
    print s.getpeername()

    # send response
    response = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"
    response += "Upgrade: WebSocket\r\n"
    response += "Connection: Upgrade\r\n"
    try:
        peername = s.getpeername()
        response += "Sec-WebSocket-Origin: http://%s\r\n" % peername[0] # % request[request.index("Origin: ")+8:-4]
    except ValueError:
        print "Bad Request"
        raise socket.error
    response += "Sec-WebSocket-Location: ws://%s\r\n" % LOCATION
    response += "Sec-WebSocket-Protocol: sample"
    response = response.strip() + "\r\n\r\n"

    print response
    s.send(response)

    while True:
        length = s.recv(1)
        print length
        if not length:
            break
        length = int(length)
        print "Length: %i" % length
        data = s.recv(length)
        print "Received: %s" % data
        print ""

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('localhost', PORT))
s.listen(5)

print "server is running..."
while True:
    sock, addr = s.accept()
    threading.Thread(target=handler, args=(sock, )).start()

Personne ne sait ce que je fais mal?

Je ne peux pas tester votre code sans le WebSocket classe. où est-il défini? Firefox 3.6.3 n'a pas l'air de savoir ce qu'il est.
Chrome Dev, et Firefox 4 est censé avoir.
Comment avez-vous offrir une prime si vous n'avez pas 100 rep?
Comment est la même ws objet référencé par ces deux fonctions, handleLoad() et send(str)? Est-il une variable globale déclarée quelque part d'autre que je ne suis pas le voir?
En Javascript globales sont tout juste d'être nommé, les habitants sont créés avec le mot-clé var

OriginalL'auteur lowerkey | 2010-07-10