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

3
我正在创建一个基于文本的游戏,实现一种基本模型,在该模型中,多个(10+)玩家与数据交互,而一个管理员观察他们并设置某些环境统计信息,影响游戏玩法。
最近我开始熟悉Django。它似乎是快速创建游戏的绝佳工具,特别是因为我的游戏的性质很大程度上取决于数据集(这非常适合使用数据库)。
我想知道如何向玩家“推送”游戏管理员所做的更改(例如,管理员可以决定向所有玩家显示图像)。该游戏是基于回合制的,不是实时的,但某些消息需要在大约实时地发送出去。
我的想法:我可以让每个玩家的浏览器定期轮询状态(例如,每30秒),以查看是否有来自管理员的消息。但这会导致滞后,意味着不同的玩家可能会在不同的时间接收到消息。并且将此间隔减少到小于10似乎对服务器来说不是一个好主意。
有更好的方法来通知客户端进行更改吗?你是否建议使用类似Django这样的Web框架?
谢谢!

并发连接数是多少? - Yaroslav
大约有10多个...平均可能是20个,最多40个。 - ty.
2个回答

0
你可以使用长轮询
此外,如果你正在创建一个多人游戏,使用一个专门设计用于长轮询和多用户交互的服务器可能会更容易和高效,而不是使用标准的HTTP服务器和框架。

0
除了Matti提到的长轮询,HTTP服务器还可以通过基本上使用一个非常长的响应并永远不完成响应(但继续向客户端推送更多数据)来流式传输数据。客户端可以在数据到达时继续响应数据。正如您已经得出的结论,对于任何相当大的项目,轮询可能是一个糟糕的解决方案。
在开始之前,您需要对HTTP和Django有相当扎实的理解。这种技术有时可能会比较复杂,是一种比较前沿的技术。
有一个有趣的项目值得一看:evserver。它是一个支持异步WSGI的HTTP服务器,将允许您使用Django开发COMET-ish应用程序。(免责声明:我实际上没有使用过evserver,但它在我的“酷东西试用清单”上)

这种解决方案是否与基于JavaScript的即时通讯解决方案(如Gmail聊天)相当,还是完全不同的东西? - ty.
有很多不同的方法来实现整个“Comet”事情,我不确定Gmail聊天使用哪种方法。 - T. Stone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接