Je viens de travailler sur l'exemple erlang websockets de Joe Armstrong's blog Je suis encore relativement nouveau sur erlang, j'ai donc décidé d'écrire un serveur simple en python qui m'aiderait à apprendre les websockets (et j'espère que certains erlang en interprétant le code de Joe). J'ai deux problèmes:Exemple Python de l'exemple websocket de Joe Erlang
1) Les données que je reçois de la page incluent un 'ÿ' comme dernier caractère. Cela ne figure pas dans la version Erlang et je ne peux pas savoir d'où il vient de fixe - En effet, les chaînes où encodée dans utf-8 et je ne les décoder
2) Je semble envoyer des données depuis le serveur (via la socket web) - ce qui peut être confirmé en regardant combien d'octets client.send() fait. Mais rien n'apparaît sur la page. Correction, je ne codais pas correctement la chaîne
J'ai mis tout le code here. Voici ma version python Incase me manque quelque chose d'évident
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 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 = client.recv(255)
print shake
client.send(our_handshake)
def interact(client, tick):
data = client.recv(255)
print 'got:%s' %(data)
client.send("clock ! tick%d\r" % (tick))
client.send("out ! recv\r")
if __name__ == '__main__':
start_server()
Pour ceux qui n'ont pas courir à travers l'exemple de Joe, mais toujours vouloir aider, il vous suffit de servir interact.html via un serveur Web, puis commencer votre serveur (le code suppose que le serveur Web est en cours d'exécution sur localhost: 8888)
soin d'être un peu plus précis? Il est difficile d'essayer de comparer les deux fichiers sur une page Web. – liwp