原文链接:

https://www.geeksforgeeks.org/what-is-web-socket-and-how-it-is-different-from-the-http/

HTTP协议

HTTP是单向的,客户端发送请求,服务器发送响应。举例来说,当客户端向服务器发送请求时,该请求以HTTPHTTPS的形式发送,在接收到请求后,服务器会将响应发送给客户端。每个请求都与一个对应的响应相关联,在发送响应后客户端与服务器的连接会被关闭。每个HTTPHTTPS请求每次都会新建与服务器的连接,并且在获得响应后,连接将自行终止。 HTTP是在TCP之上运行的无状态协议,TCP是一种面向连接的协议,它使用三向握手方法保证数据包传输的传递并重新传输丢失的数据包。

HTTP可以运行在任何可靠的面向连接的协议(例如TCPSCTP)的上层。当客户端将HTTP请求发送到服务器时,客户端和服务器之间将打开TCP连接,并且在收到响应后,TCP连接将终止,每个HTTP请求都会建立单独的TCP连接到服务器,例如如果客户端向服务器发送10个请求,则将打开10个单独的HTTP连接。并在获得响应后关闭。

理解上面这段关于 HTTP的描述时我觉得还要了解一下HTTP长连接的概念,以及HTTPTCP的关系,简单概括一下就是

HTTP消息信息是用ASCII编码的,每个HTTP请求消息均包含HTTP协议版本(HTTP/1.1HTTP/2),HTTP方法(GET/POST等),HTTP标头(Content-TypeContent-Length),主机信息等。以及包含要传输到服务器的实际消息的正文(请求主体)。HTTP标头的大小从200字节到2KB不等,HTTP标头的常见大小是700-800字节。当Web应用程序在客户端使用更多cookie和其他工具扩展代理的存储功能时,它将减少HTTP标头的荷载。

https://pic3.zhimg.com/80/v2-d16648e3fb5ea6405ad0992d732b5246_1440w.webp

WebSocket协议

WebSocket是双向的,在客户端-服务器通信的场景中使用的全双工协议,与HTTP不同,它以ws://wss://开头。它是一个有状态协议,这意味着客户端和服务器之间的连接将保持活动状态,直到被任何一方(客户端或服务器)终止。在通过客户端和服务器中的任何一方关闭连接之后,连接将从两端终止。

让我们以客户端-服务器通信为例,每当我们启动客户端和服务器之间的连接时,客户端-服务器进行握手随后创建一个新的连接,该连接将保持活动状态,直到被他们中的任何一方终止。建立连接并保持活动状态后,客户端和服务器将使用相同的连接通道进行通信,直到连接终止。

新建的连接被称为WebSocket。一旦通信链接建立和连接打开后,消息交换将以双向模式进行,客户端-服务器之间的连接会持续存在。如果其中任何一方(客户端服务器)宕掉或主动关闭连接,则双方均将关闭连接。套接字的工作方式与HTTP的工作方式略有不同,状态代码101表示WebSocket中的交换协议。

https://pic3.zhimg.com/80/v2-60317e56734d6fb8c28840bd8c22a952_1440w.webp

何时使用WebSocket