Joe Armstrong のブログの erlang websockets の例に取り組んでいます。私はまだ erlang にまったく慣れていないので、websocket について教えてくれる単純なサーバーを Python で作成することにしました (できれば、joe のコードを解釈することによっていくつかの erlang を学びます)。 . 私は2つの問題を抱えています:
1) ページから受け取るデータには、最後の文字として「ÿ」が含まれています。これは erlang バージョンには表示されず、それがどこから来ているのかわかりません
2) サーバーから (websocket を介して) データを送信しているようです。これは、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()
joe の例をまだ実行していないが支援したい場合は、Web サーバー経由で interact.html を提供し、サーバーを起動するだけです (コードは、Web サーバーが localhost:8888 で実行されていることを前提としています)。