【问题标题】:Web-based game in Python + Django and client browser pollingPython + Django 中的基于 Web 的游戏和客户端浏览器轮询
【发布时间】:2010-04-02 10:58:29
【问题描述】:

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

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

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

我的想法:我可以让每个玩家的浏览器定期(例如,每 30 秒)轮询一次状态,以查看是否有来自版主的消息。但这会造成延迟,意味着不同的玩家可能会在不同的时间收到它。并且将这个间隔减少到

有没有更好的方法来通知客户更改?除了使用 Django 之类的 Web 框架之外,您是否会提出其他建议?

谢谢!

【问题讨论】:

  • 并发连接数是多少?
  • 10+ ... 平均可能 20 个,最多 40 个。

标签: python django


【解决方案1】:

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

在开始之前,您需要对 HTTP 和 Django 有一个相当透彻的了解。这种类型的技术更先进一些,有时可能很复杂。

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

【讨论】:

  • 这种解决方案是否可以与 gmail 聊天等基于 Javascript 的 IM 解决方案相媲美,还是完全不同?
  • 有很多不同的方法可以完成整个“彗星”的事情,我不确定使用哪个 gmail 聊天。
【解决方案2】:

你可以使用long polling

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多