【问题标题】:UDP or HTTP over TCP/IP for a simple multiplayer gameUDP 或 HTTP over TCP/IP 用于简单的多人游戏
【发布时间】:2012-04-20 09:49:57
【问题描述】:

我正在构建一个多人游戏,玩家同时被问到一个问题,他们必须选择一个答案。他们有几秒钟的时间来回答,当时间到或所有人都回答时,他们会被问到下一个问题。

我计划在服务器端使用 Java(或 nodeJS,如果我想学习一个新框架),在客户端使用 JS(jQuery 和 jQuery Mobile)。我以后也可能会构建原生应用,所以我想保持该选项处于打开状态。

我的问题是:您建议使用哪种服务器通信协议?

我考虑的是常规 TCP(带有 Ajax 的 HTTP)调用,因为延迟并不是真正的问题,但如果您有其他建议,我准备重新审视这个选择。

非常感谢您的帮助

【问题讨论】:

    标签: networking web-applications tcp udp multiplayer


    【解决方案1】:

    使用 UDP 时,实施重试和拥塞控制的负担将落在身上。因此,我建议您坚持使用可靠且简单的 TCP,直到有特定的理由切换。如果延迟被证明是不可接受的,我怀疑你的情况,你可以切换到 UDP。

    【讨论】:

    • 谢谢!我原以为 UDP 对于如此低延迟的应用程序来说是一种过度杀伤力,但我想确定一下。你完全说服了我。
    【解决方案2】:

    另外要记住的是,如果您在移动设备上创建游戏并且不想失去通过 3G 连接的玩家,则需要确保使用标准端口连接到服务器端,否则接线员会断开您的连接。

    【讨论】:

      【解决方案3】:

      基于 TCP/IP 的 HTTP 流和 WebSockets 是最好的方法。利用 HTTP 和 WebSockets 的 Lightstreamer 使用 TCP,但试图通过一些智能算法来克服它的一些限制,以减少延迟(这似乎对您描述的游戏至关重要)和带宽优化。因此,它可以用于任何复杂性的多人游戏(例如,包括 MMORPG)。乍一看,它似乎可以满足您的要求,如果您还计划在第二步中开发原生应用程序,它可能是一个很好的解决方案。

      Lightstreamer 基于发布/订阅模型,其中每个项目都由一组字段定义,其值可以随时间变化(以毫秒为单位)。这些可能包括“一般项目”,由任何用户订阅(例如游戏倒计时;谁是第一响应者)并实时交付。这样,您的游戏逻辑底层的数据传输机制似乎很容易使用 Lightstreamer 实现。

      看看最近的这篇文章 (Optimizing Multiplayer 3D Game Synchronization Over the Web)。您可以浏览一个简单的多人 3D 世界的在线演示,其中集成了 Lightstreamer 以实现实时同步。

      该演示允许您调整场景的每个参数并模拟任何形式的数据传输,同时检查实际的带宽消耗。当然,完整的源代码可以在 GitHub 上免费获得。你可以试一试。如果您需要帮助,请告诉我:)

      [完全披露:我为 Lightstreamer 工作]

      【讨论】:

        猜你喜欢
        • 2017-11-28
        • 2011-09-27
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 2018-08-24
        • 2019-08-05
        相关资源
        最近更新 更多