📜  什么是网络套接字以及它与 HTTP 有何不同?

📅  最后修改于: 2021-10-19 04:51:44             🧑  作者: Mango

HTTP 和 WebSocket 都是用于客户端-服务器通信的通信协议。

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

HTTP 可以运行在任何可靠的面向连接的协议之上,例如 TCP、SCTP。当客户端向服务器发送 HTTP 请求时,客户端和服务器之间会打开一个 TCP 连接,在收到响应后,TCP 连接被终止,每个 HTTP 请求都会打开与服务器的单独 TCP 连接,例如,如果客户端向服务器发送 10 个请求服务器将打开 10 个单独的 TCP 连接。并在获得响应/回退后关闭。

以ASCII编码的HTTP消息信息,每条HTTP请求消息由HTTP协议版本(HTTP/1.1、HTTP/2)、HTTP方法(GET/POST等)、HTTP头(内容类型、内容长度)、主机信息等组成。以及包含正在传输到服务器的实际消息的正文。 HTTP 标头的大小从 200 字节到 2 KB 不等,HTTP 标头的常见大小为 700-800 字节。当 Web 应用程序在客户端使用更多 cookie 和其他工具来扩展代理的存储功能时,它会减少 HTTP 标头有效负载。

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

让我们以客户端-服务器通信为例,有一个客户端,它是一个 Web 浏览器和一个服务器,每当我们启动客户端和服务器之间的连接时,客户端-服务器进行握手并决定创建一个新连接,这个连接将保持活动直到被其中任何一个终止。当连接建立并处于活动状态时,使用相同的连接通道进行通信,直到它终止。

这就是客户端 – 服务器握手后,客户端 – 服务器决定新连接以保持其活动状态的方式,这个新连接将被称为 WebSocket。一旦通信链路建立并打开连接,消息交换将以双向模式进行,直到客户端-服务器之间的连接持续存在。如果其中任何一个(客户端 – 服务器)死亡或决定关闭连接,则双方都将关闭。 socket 的工作方式与 HTTP 的工作方式略有不同,状态码 101 表示 WebSocket 中的切换协议。

什么时候可以使用网络套接字:

  • 实时 Web 应用程序:实时 Web 应用程序使用 Web 套接字在客户端显示数据,这些数据由后端服务器不断发送。在 WebSocket 中,数据不断地被推送/传输到已经打开的同一个连接中,这就是为什么 Web 套接字更快并提高应用程序性能的原因。

    例如在交易网站或比特币交易中,这是发生在那里的最不稳定的事情,用于显示价格波动和运动数据由后端服务器通过使用 Web 套接字通道不断推送到客户端。

  • 游戏应用:在游戏应用中,你可能会关注,服务器不断接收数据,不刷新UI,它会在屏幕上生效,UI甚至不需要建立新的连接就自动刷新,所以非常有助于游戏应用程序。
  • 聊天应用程序:聊天应用程序使用 WebSocket 只建立一次连接,以便在订阅者之间交换、发布和广播消息。它重用相同的 WebSocket 连接,用于发送和接收消息以及一对一的消息传输。

何时不使用 WebSocket:如果我们想要通过网络传输的任何实时更新或连续数据流,可以使用 WebSocket。如果我们想获取旧数据,或者只想获取一次数据以使用应用程序处理它,我们应该使用HTTP 协议,不需要非常频繁或只获取一次的旧数据可以通过简单的 HTTP 请求进行查询,所以在这种情况下最好不要使用 WebSocket。

注意:如果我们只加载一次数据,RESTful Web 服务就足以从服务器获取数据。

HTTP 和 WebSocket 连接的区别:

WebSocket Connection HTTP Connection
WebSocket is a bidirectional communication protocol that can send the data from the client to the server or from the server to the client by reusing the established connection channel. The connection is kept alive until terminated by either the client or the server. The HTTP protocol is unidirectional protocol works on the top of TCP protocol which is a connection-oriented transport layer protocol, we can create the connection by using HTTP request methods after getting the response HTTP connection get closed.
Almost all the real-time application like (trading, monitoring, notification) services uses WebSocket to receiving the data on a single communication channel. Simple RESTful application uses HTTP protocol which is stateless.
All the frequently updated applications used WebSocket because it is faster than HTTP Connection. When we do not want to retain a connection for a particular amount of time or reusing the single connection for transmitting the data, HTTP connection is slower than the WebSocket..

注意:根据您的项目,您必须选择 WebSocket 或 HTTP 连接的位置。