我想问一下,与标准HTTP GET相比,当使用web套接字(消息)实现时,我是否应该期望一些不同的往返时间(向服务器发送一些信息并接收响应)。我假设web套接字已经连接并且DNS已经解析。
据我所知,如果GET在底层协议中包含多个往返,那将是不同的,我不确定。否则我希望得到相同的结果。
WebSockets似乎有较低的往返时间。我在本地和远程服务器上运行了一些测试,平均每次100个请求的传输时间:
<>之前的地方:女士WebSocket: 2.46Ajax: 9.97毫秒远程:女士WebSocket: 93.41Ajax: 183.49 以前女士测试使用带有express和socket的Node.js完成。服务器端使用socket. io, Chrome浏览器使用socket. io。客户机上的Io的库。远程测试通过3G连接运行。
Update:在低延迟连接的家中,数字有点不同:
<>之前女士Websocket: 63.02Ajax: 72.11 以前女士这表明延迟对HTTP请求的影响比对WebSocket连接的影响更大,这可能是因为HTTP必须进行更多的往返才能为每个请求重新建立连接,正如您所提到的。
这取决于您正在考虑的初始场景。
示例1:在一种情况下已经建立了HTTP 1.1连接,在另一种情况下已经建立了WebSocket。在这个场景中,这两种情况的往返将完全相同,因为在这两种情况下,您都已经建立了TCP连接,不需要进一步的应用程序握手。(注意:两种情况下发送的数据量会有所不同,但这会影响带宽,而不是延迟,即往返时间)
示例2:在一种情况下,您已经有了HTTP 1.1连接(因为可能您刚刚下载了页面中的最后一个图像),而在另一种情况下,没有打开WebSocket。在这种情况下,通过HTTP的往返时间将低于通过WebSocket的往返时间。原因是使用HTTP,您只需要发送一个TCP段并接收一个TCP段(单次往返)。使用WebSockets,您需要建立TCP连接并执行WS握手,这涉及一些往返。