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

3 投票
2 回答
3908 浏览
提问于 2025-04-15 21:08

我正在制作一个基于文本的游戏,这个游戏里有很多玩家(超过10个)会和数据互动,而有一个主持人会观察他们,并设置一些影响游戏的环境参数。

最近我开始学习Django框架。我觉得这个工具非常适合快速制作游戏,特别是因为我的游戏很依赖数据集(这和数据库很搭)。

我想知道如何把主持人做出的改变“推送”给玩家(比如,主持人可以决定给所有玩家显示一张图片)。这个游戏是回合制的,不是实时的,但有些信息需要尽量实时地发送出去。

我的想法是:可以让每个玩家的浏览器定期检查状态(比如每30秒一次),看看是否有来自主持人的消息。但这样会造成延迟,而且不同的玩家可能会在不同的时间收到消息。而且把这个时间间隔缩短到10秒以下对服务器来说似乎也不是个好主意。

有没有更好的方法来通知玩家这些变化?你会建议使用其他的网络框架,而不是Django吗?

谢谢!

2 个回答

0

你可以使用长轮询的方式。

另外,如果你在制作一个多人游戏,使用专门为长轮询和多用户互动设计的服务器会比用普通的HTTP服务器和框架要简单得多,也更有效率。

0

除了Matti提到的长轮询,HTTP服务器还可以通过一种方式来持续发送数据,就是使用一个非常长的响应,并且这个响应不会结束(而是不断地向客户端推送更多数据)。客户端可以在数据到达时继续处理这些数据。正如你所想的,轮询对于任何规模稍大的项目来说,可能并不是个好办法。

在你开始之前,你需要对HTTP和Django有一个比较清晰的理解。这种技术有点前沿,有时候可能会比较复杂。

有一个有趣的项目,值得你去看看:evserver。这是一个支持异步WSGI的HTTP服务器,可以让你用Django开发类似COMET的应用。(免责声明:我其实没有用过evserver,但它在我“值得尝试的酷东西”列表上)

撰写回答