当前位置: 首页 > 知识库问答 >
问题:

对于实时web应用程序,我有什么比websockets更快的替代方案?

仰翰采
2023-03-14

我打算写一个实时合作多人游戏。目前我正处于研究阶段。我已经写了一个基于回合的游戏,它使用了网络插座,工作正常。

然而,我还没有尝试过用这种技术写一个实时游戏。我的问题是关于网络套接字的。有没有替代方法来处理(浏览器)客户端之间的通信?我的想法是在每个客户端都有游戏状态,并且使用服务器作为中介/同步工具,只向客户端发送增量。

我主要关心的是网络速度。我希望客户端能够尽可能快地接收到彼此的动作,这样我的游戏就可以保持实时。我的每秒大约有20-30帧,每帧数据少于1 KByte(这意味着每个客户端每秒最多有20-30 KByte的数据)。

我知道像“网络速度”这样的东西取决于连接,但我对“如果所有其他条件都相同”的情况感兴趣。

共有1个答案

杨阳飇
2023-03-14

从标准浏览器来看,webSocket将是您最好的选择。唯一的两种选择是webSocket和Ajax。两者都是隐藏的TCP,所以一旦建立连接,它们几乎提供相同的传输。但是,webSocket是一种持久连接,所以每次您想要发送东西时都可以节省连接开销。另外,webSocket的持久连接允许您直接从html" target="_blank">服务器发送到您想要的客户端。

在典型的游戏设计中,底层游戏引擎需要适应服务器和任何给定客户端之间的传输速度。如果客户端的连接速度较慢,则必须将发送的数据包数量丢弃到可以跟上的内容(在您的情况下,帧更新可能更少)。连接速度就是它,因此您必须使您的应用程序以现有速度提供最佳体验。

您可以做一些其他事情来优化交通工具的使用:

>

  • 一次收集您需要发送的所有数据,并在一个较大的发送操作中发送,而不是在大量小发送中发送。在 webSocket 中,不要发送三条单独的消息,每条消息都有自己的数据。相反,请创建一条消息,其中包含所有三条消息中的信息。

    只要有可能,不要通过发送、等待响应、再次发送、等待响应等方式依赖连接的延迟…相反,试着并行化操作,这样你就可以发送、发送、发送,然后在响应进来时处理它们。

    调整从你的服务器发出的数据包的设置,这样就不会有等待查看是否有其他数据进入同一个数据包的延迟。参见Nagle的算法。我不认为你有能力在浏览器中从客户端调整这一点。

    确保您的数据尽可能有效地编码,以实现最小的数据包大小。

  •  类似资料:
    • 问题内容: 我知道这个话题已经解决了上千次。但是我找不到解决办法。 我正在尝试计算列表(df2.list2)的列中出现列表(df1.list1的每一行)的频率。所有列表仅包含唯一值。List1包含约300.000行,list2包含30.000行。 我有一个有效的代码,但是它的运行速度非常慢(因为我使用的是迭代程序)。我也尝试过itertuples(),但它给了我一个错误(“要解压缩的值太多(预期2

    • Python的http.server(或Python 2的SimpleHTTPServer)是从命令行提供当前目录内容的一种很好的方式:

    • 我正在使用以下源代码目录结构的JavaEE Web应用程序: 我感兴趣的文件夹是:它包含、用于设置servlet的xml文件、SpringBean连接上下文以及JSP标记和视图。我试图理解是什么限制/定义了这种结构。例如,JSP文件是否总是必须在中,或者它们可能在其他地方?在WEB-INF中是否还有其他内容?维基百科的WAR文件条目提到了Java类的,JAR文件的——我不确定除了其他源文件位置之外

    • 问题内容: 我怀疑对于Web应用程序(JSP,Servlet,Hibernate,MySQL)是否安全,在Web应用程序中“不同的用户”可以一次获得数千次访问。 我担心的原因如下。 想象一下,我有一个针对学校学生的Web应用程序。他们有自己的个人资料,并将维护自己的学生课程,成绩等。现在,肯定有1个以上的用户将始终使用自己的个人资料在线。这意味着,如果用户对其数学标记进行了编辑,则将在用户的个人资

    • null 在当前的JVMTI代理中已经被大量使用,所以我正在寻找一种更快的方法来获取标记或实现我自己的机制,同时保持在C端。

    • 问题内容: 我是Java的新手,我正尝试使用Firebase托管Java Web应用程序。 问题 我的问题似乎是我的文件不存在于我的Java文件结构中。因此,我不能在文件中“指向它” 。 题 关于如何托管Java Web应用程序,我不了解什么? 部署Java Web应用程序时是否有文件(Firebase显然需要)? 如何成功托管Java Web应用程序? Firebase托管设置说明: 设置与安装