我剛剛通過erlang websockets示例從Joe Armstrong's blog我仍然是erlang的新手,所以我決定在python中編寫一個簡單的服務器,以幫助教我關於websockets(和希望通過解釋喬的代碼來解釋一些erlang)。我有兩個問題:喬的Erlang websocket示例的Python示例
1)我從頁面收到的數據包含'ÿ'作爲最後一個字符。這不會出現在erlang版本,我不能確定它來自哪裏固定 - 這是因爲utf-8和我編碼的字符串沒有解碼它們
2)我似乎從服務器發送數據(通過websocket) - 可以通過查看client.send()產生多少字節來確認。但是沒有任何內容出現在網頁上。 固定,我沒有正確編碼字符串
我已經把所有的代碼here。這裏是我的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()
對於那些誰沒有經過喬的例子運行,但仍想幫忙,你只需要通過Web服務器interact.html服務了,然後啓動您的服務器(代碼假定web服務器上的本地主機上運行:8888)
護理是一個更具體一點?試圖在網頁上區分這兩個文件有點困難。 – liwp 2010-01-28 13:06:49