【问题标题】:HTTP or Websocket for a low-latency web game?用于低延迟网页游戏的 HTTP 或 Websocket?
【发布时间】:2023-04-10 07:55:01
【问题描述】:

我是 Web 开发的新手,我只想知道一些性能比较。

我正在网络上构建俄罗斯方块对战游戏。大多数游戏逻辑都在使用 C++ 构建的服务器内部。对于客户,我打算使用 cocos2d-js,它基本上是 javascript。

玩家的行为会影响对手。首先,用户的输入需要正确地到达服务器,服务器将输入应用于逻辑,并将新的游戏状态发送回客户端。客户端只需要在屏幕上表示精灵。

我最初的计划是使用 TCP 套接字来实现它,因为它可能需要低延迟。但是,我才意识到我们在 web 上不使用 TCP 套接字。

对于这种应用程序使用 HTTP 连接是否可行? 我应该尝试网络套接字吗? 有什么好处和坏处?

【问题讨论】:

    标签: javascript http tcp websocket


    【解决方案1】:

    您当然可以为此使用 HTTP,但对于实时通信,最好的选择是使用 websockets。

    原始套接字(又名 TCP 套接字)不是 W3C 标准的一部分。 即使某些浏览器有implemented 它们,我还是建议您避免使用它们,除非您不关心使用该特定浏览器锁定您的应用程序。

    一般来说,使用 Websocket 将是您的最佳选择,它们提供与原始套接字相同的性能,并且更易于从 JS 中使用。 不幸的是,使用 C++ 服务器可能会更复杂,因为您的服务器必须实现该协议,您可以在 Internet 上找到一些实现,例如 this 之一。

    或者,如果您想与客户端/服务器进行更简单的集成,您可以尝试使用 Node.js 来实现您的服务器逻辑并使用 Socket.io 库来处理通信,这也将优雅地处理不兼容的浏览器。请注意,Socket.io 使用不同的protocol,因此如果您想避免做大量额外工作,我不建议您尝试将它与您当前的 C++ 服务器一起使用。

    总结一下

    原始 (TCP) 套接字

    • 优点:更容易与您当前的 C++ 服务器集成
    • 缺点:不能保证浏览器支持,不是(网络)标准,需要更多的工作来进行同步、通信等。

    网络套接字

    • 优点:性能与 TCP 套接字相当,更容易在客户端实现
    • 缺点:您可能需要在服务器实现方面做更多工作

    我个人的建议是尽可能避免使用 TCP 套接字并遵守标准。

    编辑:显然,TCP 套接字might 最终成为 W3C 标准,API 仍然是一个草案(而且是最近的一个),所以我仍然建议不要使用它们(最新的 Chrome有一个实验性的实现)。

    【讨论】:

    • 使用原始 TCP 套接字,您仍然需要设置一个框架机制,这基本上就是 WS 协议的内容。
    【解决方案2】:

    我认为@Sosdoc 给出了正确的答案。我唯一想补充的是,像 SignalR 这样的库可以帮助您实现 websockets。您可能想查看 github 上的 c++ signalr-qt 项目:https://github.com/p3root/signalr-qt

    【讨论】:

    • SignalR 是一个 polyfill,在其有关“横向扩展”的文档中解释了许多可扩展性问题。我会使用原始 WebSockets。
    猜你喜欢
    • 2012-09-26
    • 2010-09-07
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2014-07-24
    • 2023-03-19
    相关资源
    最近更新 更多