1

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

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

4

2 回答 2

3

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

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

或者,您需要一些非常具体的东西并且不介意编写事件循环,只需使用 poll 或 select 获取套接字和其他资源......

于 2012-05-04T09:49:48.487 回答
2

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

您应该坚持使用 TCP,直到您可以证明您的游戏存在问题。

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

于 2012-05-04T15:05:24.293 回答