【问题标题】:Non-blocking UDP server in Python game?Python游戏中的非阻塞UDP服务器?
【发布时间】:2012-05-04 09:12:29
【问题描述】:

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

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

【问题讨论】:

标签: python sockets udp twisted pygame


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      相关资源
      最近更新 更多