通过websocket连接发送数据包有哪些额外开销?

时间:2017-01-20 16:13:55

标签: websocket packet data-transfer

执行AJAX请求时,我总是尽量少做,因为每个请求都需要打开http连接来发送数据。由于websocket连接始终打开,发送请求的明显数据包带宽是否有任何成本?

例如。在1分钟的空间内,客户端将向服务器发送100kb的数据。假设客户端不需要对这些请求中的任何一个进行响应,那么将数据包排队并在一个大突发中发送它们是否有利于在它们准备就绪时发送它们?

换句话说,对于一直打开的连接,是否存在停止和启动数据传输的开销?

我希望尽可能实时制作多人浏览器游戏,但我不想发现每分钟100次微小请求与较大的整合请求相比会导致服务器额外压力。据我所知,如果客户需要一个响应,它会慢一些,因为有很多等待来回。我会考虑这一点,只有在适当的时候才能巩固。每分钟更小的请求,更好的用户体验,但我不知道它将在服务器上带来什么损失。

1 个答案:

答案 0 :(得分:1)

对于给定的消息传输,webSocket消息的开销比通过Ajax调用发送相同的消息要低,因为webSocket连接已经建立,并且因为webSocket消息的开销低于HTTP请求。

首先,发送一个较大的传输与发送大量较小的传输相比,总是有更少的开销。这只是TCP的本质。每个TCP数据包都会被单独处理和确认,因此发送更多数据包会花费更多的开销。这种差异是相关的还是重要的,值得编写额外代码或者值得牺牲用户体验的某些元素(因为批处理的延迟)完全取决于给定情况的具体情况。

由于您已经描述了如果没有延迟且没有批处理数据包,您的客户端获得最佳体验的情况,那么您应该做的就是不实现批处理并测试服务器处理方式当它变得非常繁忙时,有大量较小数据包的负载。如果工作正常,那么请保持更好的用户体验。如果您在跟上负载时遇到问题,那么请认真分析您的服务器,找出性能的主要瓶颈在哪里(您可能会对瓶颈的实际位置感到惊讶,因为它往往不是您认为的那样 - 那个& #39;为什么你必须分析和测量知道在哪里集中精力来提高可扩展性。

仅供参考,由于在大多数TCP实现中实现Nagel's algorithm,如果您在时间上间隔很近或者通过较慢的链接发送多个请求,TCP堆栈本身会为您执行少量批处理

也可以实现一个动态系统,只要您的服务器能够跟上,您就可以保持较小且响应速度更快的数据包,但是如果您的服务器开始变忙,您就可以开始批处理为了减少单独传输的数量。