Я только что работал над примером erlang websockets из в блоге Джо Армстронга Я все еще новичок в erlang, поэтому я решил написать простой сервер на python, который помог бы научить меня веб-сокетам ( и, надеюсь, немного эрланга, интерпретируя код Джо). У меня две проблемы:
1) Данные, которые я получаю со страницы, включают 'ÿ' в качестве последнего символа. Это не отображается в версии erlang, и я не могу понять, откуда она взялась Исправлено - Это было потому, что строки были закодированы в utf-8, а я не декодировал их
2) Я, кажется, отправляю данные с сервера (через веб-сокет) - что можно проверить, посмотрев, сколько байтов делает client.send (). Но ничего не появляется на странице. Исправлено, я неправильно кодировал строку
Я положил весь код здесь . Вот моя версия на Python, если я упускаю что-то очевидное
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()
Для тех, кто не пробежал по примеру Джо, но все еще хочет помочь, вам просто нужно открыть файл connect.html через веб-сервер, а затем запустить свой сервер (код предполагает, что веб-сервер работает на localhost: 8888)