目录
一、概述
HTTP和WebSocket都是啥?
‘
1、HTTP(超文本传输协议)
比如我们去逛某宝的商品列表,从HTTP协议的角度来看,前端发送了一次HTTP请求,服务器返回一次HTTP响应。不过从始至终服务器都不会主动给客户端发送消息请求,这就是HTTP协议的特点。
HTTP有轮询和长轮询是两种客户端与服务器之间进行数据交换的技术,常用于实现网页上的实时数据更新。这些技术在 WebSocket 出现之前特别流行,尤其是在需要从服务器实时获取更新的场景中。
2、轮询和长轮询
轮询是一种客户端定时发送请求到服务器的技术,以检查是否有新数据可用。这是一种非常直接的方法,客户端每隔一定时间(如每5秒)向服务器发起HTTP请求,无论服务器是否真的有新数据提供。
- 客户端发起HTTP请求到服务器。
- 服务器立即响应,返回数据(如果有新数据)或者返回一个空响应。
- 客户端处理响应,然后等待一定的时间。
- 时间到了之后,客户端再次发送请求。
- 这个过程持续重复。
缺点也很明显,这样频繁的向后端发起请求必定会给服务器带来大量不必要的数据流量和服务器负载,而且实时性不足,为此有了长轮询
长轮询是轮询的一个改进版本,可以提供更快的响应时间和更少的服务器负载。与传统轮询不同,长轮询在服务器没有数据可发送时不会立即响应客户端的请求。而是保持连接开放,直到有数据发送或达到预设的超时时间。
- 客户端发送HTTP请求到服务器。
- 服务器不立即响应。它将请求挂起,直到有新数据可用或超时。
- 一旦有新数据可用,服务器立即响应请求,发送数据给客户端。
- 客户端收到数据并处理后,立即发起新的请求,重复此过程。
这样减少了不必要的HTTP请求,因为每次请求都可能得到有效数据,而且响应速度更快,因为数据一旦可用,客户端会立即收到通知。
3、WebSocket
又比如我们玩传奇一刀999的网页游戏,我们甚至全程都没有点一次鼠标,但是服务器就源源不断地将怪物的移动数据和攻击数据发给我们。这种服务器可以主动给客户端发送消息的可双向传输数据场景就是使用了WebSocket协议。
底层原理:
- WebSocket协议建立在TCP协议基础上,所以服务器也容易实现,不同的语言都有支持。
- tcp协议是全双工协议,http协议基于它,但设计成了单向
- WebSocket没有同源限制。(什么是同源看这里: localhost跨域问题解决-CSDN博客)
- WebSocket连接开始于一个HTTP请求,这个过程叫做握手,这个请求包含特定的头部信息,表明客户端希望将连接“升级”为WebSocket。如果服务器接受请求,它会返回一个响应,同意升级到WebSocket。此后,这个TCP连接将用于WebSocket通信,而不是传统的HTTP请求和响应。
至于Socket协议,套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。它偏向于底层,与WebSocket的关系就如Java和JavaScript,可以说是除了名字相似之外没什么关系。