一个有两个线程的应用程序。它是一个网络控制的游戏,
1.线程(服务器)
- 接受套接字连接并接收消息
- 发送消息时,创建一个事件并将其添加到队列中
代码:
class SingleTCPHandler(SocketServer.StreamRequestHandler):
def handle(self):
try:
while True:
sleep(0.06)
message = self.rfile.readline().strip()
my_event = pygame.event.Event(USEREVENT, {'control':message})
print message
pygame.event.post(my_event)
2.线程(pygame)
- 负责游戏渲染
- 通过服务器填充的事件队列接收消息
- 每 60 毫秒根据消息渲染游戏
这就是游戏的外观。控制消息只是小方块的速度。
为了调试,我从虚拟机连接到服务器:
ncat 192.168.56.1 2000
然后发送控制消息。在生产中,这些消息将由 Android 设备每 50 毫秒发送一次。
问题
在我的调试环境中,我以几秒钟的时间手动键入消息。在此期间,我不输入任何内容,游戏被渲染了很多次。发生的事情是message
(在服务器代码中)不断地用先前接收到的值呈现。
我发送以下内容:
1:0.5
在启动应用程序的控制台上,由于print message
服务器代码中的行,我收到以下信息:
alan@alan ~/.../py $ python main.py
1:0.5
游戏所做的是它不断地接收这个值(随着它呈现的时间段,而不是我输入的每隔几秒)接收这个值。
因为那是发生的,我希望print message
which is inwhile True
也不断输出,并且输出是:
alan@alan ~/.../py $ python main.py
1:0.5
1:0.5
1:0.5
1:0.5
....
然而事实并非如此。请告知(如果解释性不够,我也愿意建议将主题更改为什么)