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

2024-09-27 00:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我的想法是:我可以让每个玩家的浏览器定期(比如说,每30秒)轮询一次状态,看看是否有一条来自版主的消息。但这会造成延迟,意味着不同的玩家可能会在不同的时间收到。对于服务器来说,将此间隔缩短到<;10似乎是个坏主意。在

有没有更好的方法来通知客户变化?除了使用Django这样的web框架之外,您是否建议其他方法?在

谢谢!在


Tags: 工具数据django方法模型文本数据库游戏
2条回答

除了Matti提到的长轮询之外,HTTP服务器还可以通过基本上使用一个非常长的响应来流式传输数据,而不会完成响应(而是继续将更多数据推送到客户机)。当数据进来时,客户端可以继续响应。正如您已经得出的结论,对于任何规模适当的项目来说,轮询可能是一个糟糕的解决方案。在

在你开始理解HTTP之前,你可以很好地理解。这种类型的技术更具前沿性,有时会很复杂。在

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

您可以使用long polling。在

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

相关问题 更多 >

    热门问题