Python + Django中的基于Web的游戏和客户端浏览器轮询

时间:2010-04-01 21:12:37

标签: python django

我正在创建一个基于文本的游戏,它实现了一个基本模型,其中多个(10+)玩家与数据交互,一个主持人观看它们并设置影响游戏玩法的某些环境统计数据。

最近我开始熟悉Django。在我看来,它将是一个很好的快速创建游戏的工具,特别是因为我的游戏性质在很大程度上取决于数据集(这非常适合数据库)。

我想知道如何将游戏主持人所做的更改“推”给玩家(例如,主持人可以决定向所有玩家显示图像)。游戏是基于回合的,而不是实时的,但某些消息需要大致实时推出。

我的想法:我可以让每个玩家的浏览器周期性地(例如,每30秒)轮询一次状态,以查看是否有来自主持人的消息。但这会造成滞后,意味着不同的玩家可能会在不同的时间收到它。并且将此间隔减少到<10似乎对服务器来说是一个坏主意。

是否有更好的方式告知客户变更?你会建议除了使用像Django这样的Web框架之外的东西吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用long polling

此外,如果您正在创建多人游戏,那么使用专为长轮询和多用户交互而设计的服务器而不是使用标准HTTP服务器和框架可能会更容易和更有效。

答案 1 :(得分:0)

除了Matti提到的长轮询之外,HTTP服务器还可以通过基本上使用一个非常长的响应来流式传输数据,并且永远不会完成响应(但继续将更多数据推送到客户端)。客户端可以继续响应数据。当您完成轮询时,对于任何体面的项目来说,轮询可能都是一个糟糕的解决方案。

在开始之前,您将希望对HTTP和Django有一个相当完善的理解。这种类型的技术有点尖端,有时可能很复杂。

有一个有趣的项目可能值得一试:evserver。它是一个支持异步WSGI的HTTP服务器,允许您使用Django开发COMET-ish应用程序。 (免责声明:我实际上并没有使用evserver,但它在我的“很酷的东西试试”列表中)