一个HTTP请求和一个WebSocket消息,然后断开连接 - 网络上哪个更昂贵?



假设,由于服务器限制,我们无法利用与 WebSocket 客户端的开放双向连接。但是,我们可以打开 WebSocket 连接接收消息,然后立即断开连接。或者,您可以对相同的信息发出 GET 请求。

WebSockets 源自 HTTP 请求升级,然后套接字开始。如果您可以使用 Websocket 进行一条消息传递,则标头会减少。然后,HTTP 到 RESTful 端点需要单个请求。

考虑到网络流量,哪种方法检索相同的信息需要较少?

纯粹从网络的角度来看,单个HTTP GET请求将更有效,因为它只是一个请求/响应。 如果您要保持 webSocket 打开并通过它发送大量流量,特别是如果您要发送大量小消息,则 webSocket 可能会变得更加高效。但是,对于临时 webSocket,建立 webSocket 连接的额外开销使得一个请求/响应的效率降低。

以下是每个情况的图示:

HTTP GET 请求:

Establish TCP socket (back and forths to establish the socket, more if TLS)
// http request
GET /someURL HTTP/1.1
Host: example.com:8000
OtherHeaders: otherValues

并且,一个 http 响应:

HTTP/1.1 200
OtherHeaders: otherValues
data...
Close socket

对于 webSocket:

Establish TCP Socket  (back and forths to establish the socket, more if TLS)
// webSocket connection request
GET /someURL HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
// webSocket connection response
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
// Then send actual webSocket message request in webSocket data frame format
// Then receive webSocket message response in webSocket data frame format (if response required)
Close socket

因此,由于建立 webSocket 连接的一些额外开销,客户端和服务器之间有更多的临时 webSocket 连接往返。 当您看到建立 webSocket 连接都以 http 请求/响应和 THEN 开始,然后才通过已建立的 webSocket 连接发送实际数据时,这更容易理解。

而使用 http 连接,您可以立即发送实际请求。

考虑到网络流量,哪种方法检索相同的信息需要较少?

对于单个请求/响应,纯 HTTP 请求/响应将使用较少的网络流量,因为它避免了设置 webSocket 连接的额外开销。

WebSockets 源自 HTTP 请求升级,然后套接字开始。如果您可以使用 Websocket 进行一条消息传递,则标头会减少。

是的,webSocket 允许您更有效地发送某些类型的数据,因为它们允许您只发送您想要发送的有效负载,而无需大量额外的标头,但对于只有一个请求,您有一个完整的 http 请求/响应只是为了设置 webSocket 连接,因此当仅将 webSocket 连接用于一条消息时,您不会意识到净节省。 如果(正如我假设你已经意识到的那样(,如果你保持webSocket连接打开一段时间并通过它发送许多小消息,那么它可以比普通HTTP更有效。 但是,您显然不是这种情况。

相关内容

最新更新