He estado trabajando con el ejemplo de erlang websockets de Joe Armstrong's blog Todavía soy bastante nuevo en erlang, así que decidí escribir un servidor simple en python que me ayudara a aprender sobre websockets (y con suerte algunos erlang interpretando el código de Joe). Tengo dos problemas:Ejemplo de Python del paquete websocket Erlang de Joe
1) Los datos que recibo de la página incluyen un 'ÿ' como el último carácter. Esto no aparece en la versión de Erlang y no puedo averiguar dónde está viniendo de Fijo - Esto se debió a las cuerdas donde codificados en UTF-8 y no me decodificarlos
2) que parecen para enviar datos desde el servidor (a través del websocket), lo que se puede confirmar mirando cuántos bytes hace client.send(). Pero nada está apareciendo en la página. Solucionado, no estaba codificando la cadena correctamente
He puesto todo el código here. Aquí está mi versión de pitón en caso que me falta algo obvio
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()
Para aquellos que no han ejecutado a través del ejemplo de Joe, pero todavía quiere ayudar, sólo tiene que servir hasta interact.html través de un servidor web y luego comenzar su servidor (el código se supone que el servidor web se ejecuta en localhost: 8888)
Cuidado a ser un poco más específico? Es un poco difícil tratar de distinguir los dos archivos en una página web. – liwp