Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么web套接字在';是静态连接吗?_Node.js_Sockets_Websocket_Socket.io - Fatal编程技术网

Node.js 为什么web套接字在';是静态连接吗?

Node.js 为什么web套接字在';是静态连接吗?,node.js,sockets,websocket,socket.io,Node.js,Sockets,Websocket,Socket.io,当HTTP为要通过网络传输的每个数据一次又一次地创建连接时,WEB套接字是静态的,最初会建立一次连接,并一直保持到传输完成…但是如果WEB套接字是静态的,那么为什么每个数据包的延迟都不同呢 我创建的时间间隔显示了不同的时间间隔。。那么,web套接字作为静态连接的优势是什么?或者这是web套接字中的常见问题吗 我是否需要创建缓冲区来控制数据流,因为中的数据传输是连续的。。? 当数据传输连续进行时,延迟是否会增加?使用静态打开的web套接字建立新连接没有开销(因为连接已经打开并建立),但是当您在半个

当HTTP为要通过网络传输的每个数据一次又一次地创建连接时,WEB套接字是静态的,最初会建立一次连接,并一直保持到传输完成…但是如果WEB套接字是静态的,那么为什么每个数据包的延迟都不同呢

我创建的时间间隔显示了不同的时间间隔。。那么,web套接字作为静态连接的优势是什么?或者这是web套接字中的常见问题吗

我是否需要创建缓冲区来控制数据流,因为中的数据传输是连续的。。?
当数据传输连续进行时,延迟是否会增加?

使用静态打开的web套接字建立新连接没有开销(因为连接已经打开并建立),但是当您在半个地球上发出请求时,联网需要一些时间,因此当您在半个地球上与服务器通话时会有延迟

这就是网络的工作原理

您可以从自己局域网上的服务器获得近乎即时的响应,并且服务器距离越远(就网络拓扑而言),每个数据包经过的路由器越多,总延迟就越大。正如您在前面与本主题相关的问题中所看到的,当您从您的位置到您的服务器位置执行
tracert
时,您会看到每个数据包必须经过许多不同的跃点。每一个跃点的时间都会增加,如果繁忙的路由器不能立即处理您的数据包,它们也会增加一点延迟

发送数据包和获得响应之间的延迟仅为数据包传输时间的2倍,加上服务器响应所需的时间,再加上TCP的少量开销(因为它是一个可靠的协议,需要确认)。您无法加快传输时间,除非您选择一个更近的服务器,或以某种方式影响数据包到更快路由的路由(一旦您选择使用本地ISP,这通常不在您的控制之下)

端上的缓冲量不会减少到服务器的往返时间

此外,客户机和服务器之间的网络跳数越多,在传输时间内从一个时刻到下一个时刻的变化就越大。包所经过的每一个路由器和它所经过的每一个链路都有自己的负载、拥塞等。。。这随时间而变化。你可能会观察到一个最短的传输时间(它永远不会比x快),但随着时间的推移,许多事情会影响它,使它在某些时刻比x慢。甚至可能出现ISP将路由器脱机进行维护的情况,这会给处理流量的其他路由器或跳数之间的路由带来更大的负载,因此会用临时的、较慢的、较长的路由代替。事实上有成百上千的事情会导致运输时间每时每刻都在变化。一般来说,一分钟到下一分钟的变化不大,但很容易在一天中或更长的时间内发生变化


您尚未说明这是否相关,但当给定往返的延迟很差或性能非常重要时,您要做的是尽量减少等待的往返次数。您可以通过以下两种方式实现:

1。不要对小块数据进行排序。发送大量数据的最慢方式是发送少量数据、等待响应、再发送少量数据、等待响应等。。。如果您有100个字节要发送,并且每次发送1个字节的数据等待响应,并且您的往返时间是X,那么您发送所有数据的总时间将是100X。取而代之的是,收集更大的数据并一次性发送。如果一次发送100个字节,那么总延迟可能只有X,而不是100X

2。如果可以,并行发送数据。如上所述,当往返时间不足时,发送数据、等待响应、发送更多数据、等待响应的模式速度较慢。如果您的数据可以被标记为独立的数据,那么有时您可以并行发送数据,而无需等待事先的响应。在上面的示例中,发送1个字节、等待响应、发送下一个字节、等待响应的速度非常慢。但是,如果您发送1个字节,然后发送下一个字节,然后发送下一个字节,然后在稍后处理所有响应,您将获得非常非常好的吞吐量。显然,如果您已经有100字节的数据,您也可以一次发送所有数据,但是如果数据是实时到达的,您可能希望在数据到达时发送数据,而不是等待之前的响应。显然,能否做到这一点完全取决于客户机和服务器之间的数据协议


3。一次发送较大的数据。如果可以,请立即发送较大的数据块。根据您的应用程序的不同,在发送数据之前实际等待数据积累可能有意义,也可能没有意义,但如果您已经有100字节的数据,那么请尝试一次发送全部数据,而不是将其分成小块发送。

基本网络。数据包有许多可能的路径,它们可以通过这些路径到达目的地,但它们并不总是采用相同的路径。@BenFortune好的,那么你的意思是延迟取决于它们所采用的路径。。??因此,对于每个路由,您都有不同的延迟。。??那么socket.io如何使实时应用程序延迟取决于一切:技术、路由、拥塞、服务器负载。。。没有合理的理由期望它是恒定的。嗯,谢谢。这意味着,在我们使用web套接字或任何其他传输方式的情况下,延迟变化是可以的。但是,那怎么可能呢