WebSocket是什么以及其与HTTP的区别

网络 通信技术
如果我们只想获取一次数据来用应用程序处理它,我们应该使用HTTP协议,只获取一次的数据可以通过简单的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字节到2KB不等,HTTP标头的常见大小为700-800字节。当Web应用程序在客户端使用更多的cookie和其他工具来扩展代理的存储功能时,它会减少HTTP标头负载。

图1 HTTP连接示意图图1 HTTP连接示意图

WebSocket

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

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

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

图2 WebSocket连接示意图图2 WebSocket连接示意图

PART.01何时使用WebSocket

1、实时Web应用:实时Web应用程序使用Web套接字在客户端显示数据,这些数据由后端服务器不断发送。在WebSocket中,数据被不断地推送/传输到已经打开的同一连接中,这就是为什么WebSocket更快并提高了应用程序性能。例如,在交易网站或比特币交易中,为了显示价格波动和移动数据,后端服务器使用WebSocket通道不断向客户端推送。

2、游戏应用程序:在游戏应用程序中,可能会关注这一点,服务器不断接收数据,在不刷新UI的情况下,它将在屏幕上生效,UI甚至在不建立新连接的情况下自动刷新,因此它在游戏应用程序中非常有用。

3、聊天应用程序:聊天应用程序使用WebSocket只建立一次连接,以便在订阅者之间交换、发布和广播消息。它重用相同的WebSocket连接,用于发送和接收消息以及进行一对一的消息传输。

PART.02何时不使用WebSocket

如果我们想要通过网络传输任何实时更新或连续的数据流,可以使用WebSocket。

如果我们只想获取一次数据来用应用程序处理它,我们应该使用HTTP协议,只获取一次的数据可以通过简单的HTTP请求查询,所以在这种情况下,最好不要使用WebSocket。

责任编辑:武晓燕 来源: 新钛云服
相关推荐

2023-10-23 11:07:37

HTTPRPC

2023-10-24 09:07:14

CookieSessionHTTP

2021-07-20 08:23:49

HTTPWebSocketWeb

2010-06-21 09:39:31

anacron是什么

2021-03-15 14:00:56

PythonC语言编程语言

2020-12-16 14:10:33

大数据大数据应用

2009-06-29 17:10:24

什么是JSP

2019-12-10 11:49:30

网络协议LACPPAGP

2021-05-06 15:08:40

开发前端后端

2012-07-31 15:52:48

云计算网格计算

2022-10-08 00:00:00

websocket协议HTTP

2024-01-11 08:53:58

2011-06-27 17:52:57

Voting DiskOCR

2020-10-18 09:42:52

掌握HTTP1.0 1

2021-05-12 08:20:53

开发

2018-12-27 21:54:22

2021-08-26 23:12:31

云计算边缘计算服务器

2023-10-24 15:15:26

HTTPWebSocket

2021-10-12 18:48:07

HTTP 协议Websocket网络通信

2014-07-24 10:00:21

点赞
收藏

51CTO技术栈公众号