Javascript 对于实时web应用程序,我有哪些更快的WebSocket替代方案?

Javascript 对于实时web应用程序,我有哪些更快的WebSocket替代方案?,javascript,browser,websocket,network-programming,Javascript,Browser,Websocket,Network Programming,我计划写一个实时合作多人游戏。目前我正处于研究阶段。我已经写了一个使用websockets的回合制游戏,效果很好 然而,我还没有尝试过用这种技术编写实时游戏。我的问题是关于WebSocket的。是否有其他方法处理(浏览器)客户端之间的通信?我的想法是在每个客户机中都有游戏状态,并且使用服务器作为中介/同步工具只向客户机发送增量 我主要关心的是网络速度。我希望客户能够尽快收到对方的动作,这样我的游戏就可以保持实时。我每秒有大约20-30帧,每个帧的数据量不到1 KB(这意味着每个客户端每秒最多有2

我计划写一个实时合作多人游戏。目前我正处于研究阶段。我已经写了一个使用websockets的回合制游戏,效果很好

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

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


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

在标准浏览器中,webSocket将是您的最佳选择。仅有的两种选择是webSocket和Ajax。两者都是隐蔽的TCP,因此一旦建立连接,它们几乎提供相同的传输。但是,webSocket是一种持久连接,所以每次您想要发送内容时都可以节省连接开销。另外,webSocket的持久连接允许您直接从服务器发送到所需的客户端

在典型的游戏设计中,底层游戏引擎需要适应服务器和任何给定客户端之间的传输速度。如果客户端的连接速度较慢,那么您必须减少发送给能够跟上的对象的数据包数量(在您的情况下,可能需要更少的帧更新)。连接速度就是这样,所以你必须让你的应用程序以现有的速度提供最好的体验

您可以采取其他措施来优化交通工具的使用:

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

  • 只要有可能,不要通过发送、等待响应、再次发送、等待响应等方式依赖连接的延迟。。。相反,尝试并行化操作,以便在响应到来时发送、发送、发送并处理响应

  • 调整来自服务器的传出数据包的设置,这样它们就不会因为等待同一数据包中是否有其他数据而出现无意义的延迟。看见我不认为你有能力在浏览器中从客户端调整这一点

  • 确保您的数据被尽可能有效地编码为最小的数据包大小


  • 有些东西怎么可能比websockets更快呢?websockets让您只需几字节的开销就可以发送原始二进制文件?30kb/s对于普通公众来说也太多了,如果它与帧绑定在一起的话。我不知道这就是为什么我这么问。公平地说,我的观点是,有了WebSocket,你可以在网络运行时以最快的速度发送数据,并且延迟和开销尽可能小。30FPS应该没有问题,套接字传输通常不超过10ms(不包括TTFB),除非您的服务器距离较远,在这种情况下,最多需要15ms才能在世界各地传输。15ms*2=30ms往返行程,1000ms/30ms=33.3FPS。提供纯delta可能意味着提供一个key:value对,但仅提供值的有序数组可能“更便宜”,即使使用额外的逗号创建稀疏数组,同时省略冗余元素。听起来不错。你可能想把它作为一个答案,这样我就可以投票了。@dandavis,延迟时间比你想象的要长得多。跨大西洋(例如:纽约-伦敦)通常大于100ms。如果你不幸(从网络工程的角度)居住在新西兰,你可以期望至少150毫秒的基于数据中心的托管服务。许多大型电信公司公布了历史上的往返时间。例如:你总是有两个以上的选择:)你可以使用flash创建简单的tcp/udp传输。@PavelBucek-我的回答是“从标准浏览器”。Flash不是标准浏览器的一部分,在许多浏览器(如任何移动浏览器)中根本不起作用。我无法想象现在投资设计任何需要Flash的东西。如果你想这么说,你也可以谈论Java插件。我想的更多的是OP scope——一款浏览器游戏。那么你就更经常地使用flash了。或者像unity这样的东西,它也提供网络支持。@adamarold-这个回答你的问题足够好吗?还是还有其他问题需要解释?