首页 > 编程知识 正文

WebSocket和HTTP的区别及原理

时间:2023-05-03 12:53:41 阅读:286019 作者:3329

HTTP协议

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

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

HTTP和TCP的关系和HTTP长连接的概念

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接

每个HTTP连接完成后,其对应的TCP连接并不是每次都会关闭。从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这个头部字段:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的tcp

连接不会关闭,不会永久保持连接,它是有一个保持时间的,可以在不同的服务器软件(如 Apache,Nginx ,Nginx中这个默认时间是75s)中设定这个时间。实现长连接要客户端和服务

端都支持长连接。

HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络

路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传输数据包,使在网络上的另一端

收到发送端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。

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

WebSocket协议

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

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

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

何时使用WebSocket 即时Web应用程序:即时Web应用程序使用一个Web套接字在客户端显示数据,这些数据由后端服务器连续发送。在WebSocket中,数据被连续推送/传输到已经打开的同一连接中,这就是为什么WebSocket更快并提高了应用程序性能的原因。 例如在交易网站或比特币交易中,这是最不稳定的事情,它用于显示价格波动,数据被后端服务器使用Web套接字通道连续推送到客户端。游戏应用程序:在游戏应用程序中,你可能会注意到,服务器会持续接收数据,而不会刷新用户界面。屏幕上的用户界面会自动刷新,而且不需要建立新的连接,因此在WebSocket游戏应用程序中非常有帮助。聊天应用程序:聊天应用程序仅使用WebSocket建立一次连接,便能在用户之间交换,发布和广播消息。它重复使用相同的WebSocket连接,用于发送和接收消息以及一对一的消息传输。 不能使用WebSocket的场景

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

注:如果仅加载一次数据,则RESTful Web服务足够从服务器获取数据

总结:

websocket:

​ websocket是一种双向通信协议。可以通过重用已经建立的链接通道将数据从客户端发送到服务器,或 从服务器发送到客户端。连续保持活动状态,直到被客户端或者服务器终止。​ 几乎所有的实用应用程序(交易、股票、监视、通知等服务) 都使用WebSocket在单个通 信通道上接收数据。所有经常更新的应用程序都应该使用WebSocket,它比HTTP链接更快。

HTTP

HTTP协议TCP协议之上的单向协议,TCP是面向连接的传输层协议,我们可以在获得响应HTTP

链接关闭后在使用HTTP请求方法来创建链接

简单的RESTful应用程序使用无状态的HTTP协议。

当我们不想在特定时间内保留链接或不重复单个链接来传输数据时,使用HTTP连接的速度比WebSocket慢

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。