Python游戏中的非阻塞UDP服务器?

时间:2012-05-04 09:12:29

标签: python sockets udp twisted pygame

我正在使用Python制作动作游戏。它必须支持至少2名通过互联网一起玩的玩家。我选择了UDP,因为它似乎是低延迟游戏的自然选择。我正在使用客户端 - 服务器模型,我希望有一个玩家来主持游戏。这意味着一个玩家同时托管游戏(服务器)并运行游戏(客户端)。

我应该使用线程还是其他方法?问题是Python文档说使用serve_forever但我需要一个非阻塞解决方案,理想情况下我可以调用每个游戏循环。

2 个答案:

答案 0 :(得分:3)

我认为,通过引用“Python文档说使用serve_forever”,您计划使用SocketServer。该模块实现了同步(分叉或线程)服务器,您似乎正在寻找异步解决方案。

对于异步,非阻塞解决方案,您可以查看扭曲的http://twistedmatrix.com/trac/(特别是twisted.internet)。

或者,你需要一些非常具体的东西,不介意编写一个事件循环,只需使用poll或select for socket和其他资源......

答案 1 :(得分:2)

UDP不是“自然选择”。它是针对特定类型数据(通常是位置/速度数据)的特定类型问题(数据包丢失)的优化。

你应该坚持使用TCP,直到你能证明你的游戏有问题为止。

要在Python中将非阻塞网络集成到游戏中,请查看Game采用的方法,该方法从Twisted调用PyGame主循环。这对于TCP,UDP或使用套接字的任何其他协议都同样有效。