假设,由于服务器限制,我们无法与 WebSocket 客户端使用开放的双向连接。但是,我们可以打开 WebSocket 连接接收消息,然后立即断开连接。或者,您可以对相同信息发出 GET 请求。
WebSockets 源自 HTTP 请求升级,然后套接字开始。如果您可以使用 Websockets 进行一条消息传递,则 header 会减少。然后,到 RESTful 端点的 HTTP 只需要一个请求。
考虑到网络流量,哪种方法需要更少的时间来检索相同的信息?
最佳答案
纯粹从网络 Angular 来看,单个 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 请求/响应开始,然后才通过建立的 webSocket 连接发送实际数据时,这就更容易理解了。
而使用 http 连接时,您可以立即发送实际请求。
Considering the network traffic which method requires less to retrieve the same information?
对于单个请求/响应,普通 HTTP 请求/响应将使用较少的网络流量,因为它避免了设置 webSocket 连接的额外开销。
WebSockets originate with a HTTP request upgrade then the socket begins. If you can make one message delivery with Websockets the header is reduced.
是的,webSockets 可以让您更有效地发送某些类型的数据,因为它们可以让您只发送您想要发送的有效负载,而无需大量额外的 header ,但是对于只有一个请求,您只需发送一个完整的 http 请求/响应设置 webSocket 连接,这样您就不会意识到仅使用 webSocket 连接处理一条消息时所节省的净成本。如果(我想您已经意识到),如果您保持 webSocket 连接打开一段时间并通过它发送许多小消息,那么它会比普通 HTTP 更有效。但是,您的情况显然并非如此。
关于javascript - 一个 HTTP 请求和一条 WebSocket 消息,然后断开连接——网络上什么更昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57515475/