Ho appena lavorato attraverso l'esempio di websocket di erlang da Joe Armstrong's blog Sono ancora abbastanza nuovo da erlang quindi ho deciso di scrivere un semplice server in python che mi aiutasse a insegnarmi le websocket (e spero che qualcuno possa interpretare interpretando il codice di joe). Ho due problemi:Esempio Python dell'Enlang websocket di Joe esempio
1) I dati ricevuti dalla pagina includono un 'ÿ' come ultimo carattere. Questo non appare nella versione Erlang e non riesco a capire dove è venuta da Fixed - Questo perché le stringhe in cui codificati in UTF-8 e non li stavo decodifica
2) mi sembra per inviare dati dal server (tramite websocket) - che può essere confermato osservando quanti byte client.send() fa. Ma nulla appare sulla pagina. Risolto, non stavo codificando correttamente la stringa
Ho messo tutto il codice here. Ecco la mia versione di Python in caso mi manca qualsiasi cosa ovvia
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()
Per coloro che non hanno eseguito attraverso l'esempio di Joe, ma ancora voglia di aiutare, non vi resta che servire interact.html attraverso un server Web e quindi avviare il server (il codice presuppone il server web è in esecuzione su localhost: 8888)
cura per essere un po 'più specifico? È piuttosto difficile cercare di diffare i due file su una pagina web. – liwp