我正在开发一个简单的多人在线文本游戏,我阅读select()
并且poll()
是多路复用 I/O 的流行方法。
我在 GNU C 文档中找到了这个例子,它使用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
为此目的使用?考虑到我会将它用于多人游戏服务器(每秒可能会收到很多消息),我认为我不能让消息混淆。