什么是websocket协议?它与HTTP协议之间的区别是什么?

 

敲黑板!

 

这个文档是从谷歌上的一篇文档翻译过来的。自己翻译的过程理解了下,感觉很清晰,对websocket在感知上,有个大概的认识!

 

供大家参考······

 

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

 

HTTP协议

 

HTTP是单向的,客户端发送请求,服务器端发送响应。让我们举个例子,当用户向服务器发送请求时,该请求以HTTP或HTTPS的形式发送,服务器在接收到请求后,向客户端发送响应,每个请求都与相应的响应相关联,在发送响应后,连接关闭,每个HTTP或HTTPS请求每次都与服务器建立新的连接,在获得响应后,连接自己终止。

HTTP是一种运行在TCP之上的无状态协议,TCP是一种面向连接的协议,它通过三次握手方式保证数据包传输的交付,并对丢失的数据包进行重新传输。

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

 

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

 

 

websocket协议

 

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

 

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

 

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

 

 

什么时候使用websocket

  • 实时web应用程序:实时web应用程序使用一个websocket在客户端显示数据,这些数据是由后端服务器不断发送的。在WebSocket中,数据被不断地推送/传输到相同的已经打开的连接中,这就是WebSocket更快和提高应用程序性能的原因。
    例如在交易网站或比特币交易中,为了显示价格波动和移动数据,后台服务器通过WebSocket通道不断地将数据推送给客户端。

 

  • 游戏应用程序:在游戏应用程序中,你可能会关注这一点,服务器不断接收数据,不需要刷新UI,它就会在屏幕上生效,UI会自动刷新,甚至不需要建立新的连接,所以这在游戏应用程序中非常有用。

 

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

 

什么时候不使用websocket

 

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

 

注意如果只加载一次数据,restful web服务足以从服务器获取数据

 

HTTP和WebSocket连接的区别

 

WebSocket 连接

HTTP 连接

WebSocket是一种双向通信协议,它可以通过重用已建立的连接通道将数据从客户机发送到服务器,也可以从服务器发送到客户机。连接保持活动状态,直到客户机或服务器终止。

HTTP协议是一种工作在TCP协议之上的单向协议,TCP协议是一种面向连接的传输层协议,我们可以在HTTP连接关闭后使用HTTP请求方法创建连接。

几乎所有的实时应用程序,如(交易、监控、通知)服务都使用WebSocket在单个通信通道上接收数据。

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

所有频繁更新的应用程序都使用WebSocket,因为它比HTTP连接更快。

当我们不想保留连接一段特定的时间或不想重用连接来传输数据时;HTTP连接比WebSockets慢。

 

注意:取决于你的项目,你必须选择它将是WebSocket或HTTP连接。

posted @ 2022-07-25 11:13  Zhai_David  阅读(643)  评论(0编辑  收藏  举报