为什么networking套接字的延迟在静态连接时变化?

由于HTTP会一次又一次地为每个数据在networking上传输而创build连接,所以WEB SOCKETS是静态的,连接将会初始化一次,直到传输完成。但是如果Web套接字是静态的,那么为什么每个数据包的延迟都不相同。

我创build的延迟testing应用程序显示了我不同的时间延迟..所以web套接字是一个静态连接的优点是什么,如果这是在networking套接字中的常见问题?

我是否需要创build一个缓冲区来控制数据stream,因为数据传输是连续的。 当数据传输是连续的时候,是否延迟增长?

使用静态打开的Web套接字build立新的连接没有任何开销(因为连接已经打开并build立),但是当你在半途要求请求时,networking需要一些时间,重新与世界各地的服务器交谈。

这就是networking的工作原理。

您可以从自己的局域网上的服务器获得即时响应,服务器距离越远(就networking拓扑而言),每个数据包通过的路由器越多,总延迟就越多。 正如你在前面关于这个主题的问题中所见,当你从你的位置到你的服务器位置执行tracert时候,你看到了每个数据包必须经过的很多不同的跳跃。 每个这些跳的时间都累加起来,并且繁忙的路由器如果不立即处理你的数据包,也可能每个都增加一个小的延迟。

发送数据包和获得响应之间的延时只是数据包传输时间的两倍,无论您的服务器需要响应,还可能是TCP的一个小小的开销(因为它是一个可靠的协议,它需要确认)。 除非您select更接近或以某种方式影响数据包走向更快路线的路线(一旦您select了本地ISP使用,则大多数情况下不受您的控制),否则无法加快运输时间。

您的端没有任何缓冲将减less您的服务器往返时间。

另外,在您的客户端和服务器之间,networking中的跳数越多,在传输时间中,您可能会从一个时刻到另一个时刻获得更多的变化。 数据包经过的每一个路由器以及它所经过的每个链路都有自己的负载,拥塞等等,这些随着时间而变化。 你可能会观察到最小的运输时间(它永远不会比x快),但是随着时间的推移,很多事情都会影响它的速度。 甚至有一种情况是ISP将路由器脱机进行维护,这会使处理业务的其他路由器承担更多的负担,或者跳数之间的路由会下降,所以临时但较慢和较长的路由被replace。 实际上有成百上千的东西会导致运输时间随时变化。 一般来说,从一分钟到下一分钟都不会有很大的变化,但是可以在一天或更长时间内轻易改变。


您还没有说过这是否相关,但是如果在给定的往返时间内延迟较差,或者性能非常重要,那么您想要做的就是尽量减less等待的往返次数。 您可以通过以下几种方法来实现这一点:

1.不要sorting小块数据。 发送大量数据的最慢的方法是发送一点数据,等待响应,发送更多的数据,等待响应等等。如果你有100个字节的发送,并且你发送了数据1每次一个字节等待一个响应,你的往返时间是X,你将有100X的总发送时间来发送所有的数据。 取而代之的是收集一大块数据并一次性发送。 如果一次发送100个字节,则可能只有X的总延迟,而不是100X。

2.如果可以的话,并行发送数据。 如上所述发送数据的模式,等待响应,发送更多的数据,等待响应时间慢,往返时间差。 如果您的数据可以被标记为独立,那么有时您可以并行发送数据,而无需等待事先的响应。 在上面的例子中,发送1个字节很慢,等待响应,发送下一个字节,等待响应。 但是,如果你发送1个字节,然后发送下一个字节,然后发送下一个字节,然后几次你处理所有的响应,你会得到很多,更好的吞吐量。 很明显,如果你已经有了100个字节的数据,那么你可以马上发送这个数据,但是如果数据是实时到达的,你可能只是在发送数据的时候把它发送出去,而不是等待以前的响应。 显然你是否可以做到这一点完全取决于你的客户端和服务器之间的数据协议。

3.一次发送更大的数据。 如果可以的话,一次发送更大的数据块。 根据您的应用程序,在发送数据之前实际等待数据累积可能有意义,也可能没有意义,但是如果您已经有100个字节的数据,则尝试一次发送所有数据,而不是发送较小的数据。