Je viens de travailler à travers l'exemple d'Erlang Webockets de Blog de Joe Armstrong Je suis toujours tout à fait nouveau à Erlang, j'ai décidé d'écrire un serveur simple à Python qui aiderait à m'apprendre sur les standards (et j'espère que certains erlang en interprétant le code de Joe). J'ai deux problèmes:
1) Les données que je reçoivent de la page comprennent un "Ã" comme le dernier caractère. Cela n'apparaît pas dans la version erlang et je ne peux pas travailler là où il vient de fixe - c'était parce que les chaînes où elles sont codées dans UTF-8 et je ne les décodage pas strong> p > 2) Je semble être d'envoyer des données du serveur (via la bande WebSocket) - qui peut être confirmée en examinant combien d'octets client.Send (). Mais rien ne figure sur la page. J'ai mis tout le code ici . Voici ma version Python en cas d'inconvénient, je manque tout ce qui est évident p> pour ceux qui n'ont pas traversé l'exemple de Joe, mais que je souhaite toujours aider, il vous suffit de servir d'interaction. HTML via un serveur Web, puis démarrez votre serveur (le code suppose que le serveur Web est en cours d'exécution sur localhost: 8888) p> p>
3 Réponses :
Pour ceux qui sont intéressés, c'était la solution
import threading import socket def start_server(): tick = 0 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 1234)) sock.listen(100) while True: print 'listening...' csock, address = sock.accept() tick+=1 print 'connection!' handshake(csock, tick) print 'handshaken' while True: interact(csock, tick) tick+=1 def send_data(client, str_): #_write(request, '\x00' + message.encode('utf-8') + '\xff') str_ = '\x00' + str_.encode('utf-8') + '\xff' return client.send(str_) def recv_data(client, count): data = client.recv(count) return data.decode('utf-8', 'ignore') def handshake(client, tick): our_handshake = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"+"Upgrade: WebSocket\r\n"+"Connection: Upgrade\r\n"+"WebSocket-Origin: http://localhost:8888\r\n"+"WebSocket-Location: "+" ws://localhost:1234/websession\r\n\r\n" shake = recv_data(client, 255) print shake #We want to send this without any encoding client.send(our_handshake) def interact(client, tick): data = recv_data(client, 255) print 'got:%s' %(data) send_data(client, "clock ! tick%d" % (tick)) send_data(client, "out ! %s" %(data)) if __name__ == '__main__': start_server()
Soin d'être un peu plus précis? C'est un peu difficile d'essayer de diffuser les deux fichiers sur une page Web.
Merci d'avoir partagé le code. J'ai rencontré un problème d'exécution de ce code dans Windows. Que je pense que cela pourrait aider pour les personnes qui figurent toujours. P>
Je veux énoncer l'espace, de sorte que le barcom de la mise à niveau: Websocket ' P> li>
Assurez-vous que votre page d'hébergement correspond à l'origine, ce qui, dans ce cas, il est ' http: // localhost: 8888 < / a> ' p> li>
ol>
Cela fonctionne magnifiquement pour moi maintenant. P>
Eventlet a la prise en charge de Websocket intégré et Stargate est un package destiné à utiliser WebSockets avec la pyramide Web Framework: http: / /boothlead.github.com/stargate/ p>