私は単純なマルチプレイヤー オンライン テキスト ゲームに取り組んでおり、I/O を多重化する一般的な方法select()
を読みました。poll()
この例は、GNU C docs で見つけましたselect
。私はそれを実行し、次のような 3 つの Python テスト クライアントを作成しました。
import socket
import time
port = 5555
test = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
test.connect(('localhost', port))
while 1:
test.send('aaaa')
time.sleep(0.5)
次に、クライアントを (サーバーを実行している同じコンピューターから) 異なる文字列 ( aaaa
、55
および..
) で実行しました。
サーバーの出力は
Server: got message: `aaaa'
Server: got message: `55aa'
Server: got message: `aaaa'
Server: got message: `55aa'
Server: got message: `..aa'
弦が混じっていました。
これはばかげたコンパイル エラーですか、テスト クライアントのエラーですか、それとも同じコンピュータからクライアントとサーバーを実行しているという事実ですか? select
それとも、このプログラムは、この目的に使用すべきではないと言っていますか? これをマルチプレイヤー ゲーム サーバー (おそらく 1 秒間に大量のメッセージを受け取る) に使用することを考えると、メッセージを混同させることはできないと思います。