http websocket socket 怎么选?

336 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。

http存在有啥问题?

http协议是一个应用层的无状态协议,也就是说每次客户端向服务端请求数据时候,服务端都不会记得这个客户端 之前的所有操作。

http还有一个特点就是只能由客户端发送Request ---> server 然后 response ,不能由服务端主动推送信息给客户端。

在http1.0时代 每次发送一个请求都需要建立一次连接,十分浪费资源和时间。

http1.1 协议中,出现了connect:keep—alive 来通过建立一次长 连接,来保持持续 通信。

但是这个策略并没有 改变只能由客户端发送请求,服务端 应答的本质问题。消息通信从本质上来讲还是 单向的。如果想要获取服务端实时的信息状态,客户端不得不采用两种 方式,1. 轮询 2. 发送给服务器 一次请求,服务器等待有消息更新时候返回,这时候会造成服务端 大量进程挂起,浪费资源。

于是 在html5 中 规定了新的websocket协议,这个协议可以最开始的时候先通过http协议建立 连接 ,之后 服务端和 客户端就可以直接脱离 http协议 使用 websocket协议进行通信了。websocket解决了一个重要的问题,就是建立连接之后,服务端也可以主动给客户端发送消息。

socket出现的时间比较早,为什么不直接使用socket 通信,而是又要新制定一个websocket呢?

image-20220426235039344.png

原因大概是因为浏览器是一个沙箱环境,不能直接调用操作系统的接口,避免通过可以直接调用系统接口可能产生系统安全问题。