握手过程:
- 浏览器、服务器建立TCP连接,三次握手 。这是通信的基础,传输控制层,若失败后续都不执行 。
- TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息 。(开始前的HTTP握手)
- 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据 。
- 当收到了连接成功的消息后,通过TCP通道进行传输通信 。
2.3 webSocket与HTTP的关系相同点:
- 都是一样基于TCP的,都是可靠性传输协议 。
- 都是应用层协议 。
- WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息 。
- HTTP是单向的 。
- WebSocket是需要握手进行建立连接的 。
2.4 WebSocket与Socket的关系Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口 。tcp是可靠的连接,且连接后才可以发送数据;udp是不可靠的连接,不连接就可以发送数 。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口 。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议 。
当两台主机通信时,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接 。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次 。
WebSocket则是一个典型的应用层协议,Socket是传输控制层协议 。
文章插图
2.5 WebSocket 特点以及常见概念
- 支持浏览器/Nodejs环境
- 支持双向通信
- API简单易用
- 支持二进制传输
- 减少传输数据量
文章插图
2.5.2 短轮询:客户端不管是否收到服务端的response数据,都会定时向服务端发送请求,查询是否有数据更新 。http 短轮询的局限是实时性低;
文章插图
长轮询与短轮询两者相同点: 可以看出 http 长轮询和 http 短轮询的都会 hold 一段时间;
长轮询与短轮询两者不同点 间隔发生在服务端还是浏览器端: http 长轮询在服务端会 hold 一段时间, http 短轮询在浏览器端 “hold”一段时间; 应用: http长轮询一般用在 web im, im 实时性要求高, http 长轮询的控制权一直在服务器端, 而数据是在服务器端的,因此实时性高;
http 短轮询一般用在实时性要求不高的地方, 比如新浪微薄的未读条数查询就是浏览器端每隔一段时间查询的. setInterval
2.5.3 长连接
- 长连接是指的TCP连接,而不是HTTP连接
- 长连接意味着连接会被复用
- 服务器和客户端都设置 Connection: keep-alive
- 现在基本用的HTTP1.1协议,HTTP1.1默认长连接
与 connection 对应的一个字段是 keep-live, http 响应头中出现, 他的格式是 timeout=30,max=5, timeout 是两次 http 请求保持的时间(s), , max 是这个 tcp 连接最多为几个 http请求重用
指在一个TCP连接上可以发送多个数据包,在TCP连接保持期间,如果没有数据包发送,则双方就需要发送心跳包来维持此连接 。连接过程: 建立连接——数据传输——…——(发送心跳包,维持连接)——…——数据传输——关闭连接
好处:
比如请求一个普通的网页,这个网页里肯定包含了若干css、JS等一系列资源,如果是短连接(也就是每次都要重新建立TCP连接)的话,那每次打开一个网页,基本就要建立几个甚至几十个TCP连接,浪费很多网络资源 。如果是长连接的话,那么这么多HTTP请求(包括请求网页的内容、CSS文件、JS文件、图片等)都是使用的一个TCP连接,显然可以节省很多资源 。
推荐阅读
- WebSocket心跳检测和重连机制
- 如何用 OBS 和 WebSockets 播放视频流
- websocket连接太多导致服务器卡顿怎么办?一招轻松实现横向扩展
- WebSocket 协议初探
- 网页聊天客服是如何制作的?使用WebSocket技术!
- 如何在小程序中实现 WebSocket 通信
- PHP实时消息推送关于websocket技术
- WebSocket的基本使用
- 不懂风格、怎能会穿?8种“风格穿搭”解析,值得精读的穿衣干货
- WebSocket 通信过程与实现