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

通过websocket连接发送数据包还有哪些额外开销?,websocket,packet,data-transfer,Websocket,Packet,Data Transfer,在执行AJAX请求时,我总是尽量少做,因为每个请求都需要打开http连接来发送数据,这会增加开销。由于websocket连接一直处于开放状态,发送请求除了明显的数据包带宽之外,还有其他成本吗 比如说。在1分钟内,客户端将向服务器发送100kb的数据。假设客户机不需要对这些请求中的任何一个进行响应,那么将数据包排队并在一次大突发中发送与在数据包准备就绪时发送相比,是否有任何优势 换句话说,对于持续打开的连接,停止和启动数据传输是否有开销 我想让多人浏览器游戏尽可能实时,但我不想发现与更大的整合请求

在执行AJAX请求时,我总是尽量少做,因为每个请求都需要打开http连接来发送数据,这会增加开销。由于websocket连接一直处于开放状态,发送请求除了明显的数据包带宽之外,还有其他成本吗

比如说。在1分钟内,客户端将向服务器发送100kb的数据。假设客户机不需要对这些请求中的任何一个进行响应,那么将数据包排队并在一次大突发中发送与在数据包准备就绪时发送相比,是否有任何优势

换句话说,对于持续打开的连接,停止和启动数据传输是否有开销


我想让多人浏览器游戏尽可能实时,但我不想发现与更大的整合请求相比,每分钟100秒的微小请求会给服务器带来额外的压力。我理解,如果客户需要响应,则响应速度会变慢,因为来回等待的时间很多。我会考虑这一点,只有在适当的时候才合并。每分钟的请求越小,用户体验就越好,但我不知道这会对服务器造成多大的损失

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

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

既然您已经描述了这样一种情况,即如果没有延迟和数据包的批处理,您的客户机将获得最佳体验,那么您应该做的似乎不是实现批处理,并测试您的服务器在非常繁忙时如何使用大量较小的数据包处理负载。如果效果不错,那就继续使用更好的用户体验。如果您在跟上负载方面遇到问题,那么请认真分析您的服务器,找出性能的主要瓶颈所在(您可能会对瓶颈的实际位置感到惊讶,因为它通常不是您认为的位置-这就是为什么您必须对其进行分析和测量,以了解在哪里集中精力来提高可伸缩性)

仅供参考,由于在大多数TCP实现中都实现了,如果您发送多个时间间隔相当近的请求或通过较慢的链路发送请求,TCP堆栈本身会为您执行少量批处理


也可以实现一个动态系统,只要服务器能够跟上,您就可以处理更小、响应更快的数据包,但如果服务器开始忙起来,您就可以开始批处理,以减少单独传输的数量。

@DanHastings-这回答了您的问题吗?不是质问者,但肯定是一个问题诅咒我的!