ws+socket.io 精读Websocket原理大全需知,以及具体使用( 二 )


握手过程:

  1. 浏览器、服务器建立TCP连接,三次握手 。这是通信的基础,传输控制层,若失败后续都不执行 。
  2. TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息 。(开始前的HTTP握手)
  3. 服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据 。
  4. 当收到了连接成功的消息后,通过TCP通道进行传输通信 。
Websocket默认使用请求协议为:ws://,默认端口:80 。对TLS加密请求协议为:wss://,端口:443 。
2.3 webSocket与HTTP的关系相同点:
  1. 都是一样基于TCP的,都是可靠性传输协议 。
  2. 都是应用层协议 。
不同点:
  1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息 。
  2. HTTP是单向的 。
  3. WebSocket是需要握手进行建立连接的 。
联系: WebSocket在建立握手时,数据是通过HTTP传输的 。但是建立之后,在真正传输时候是不需要HTTP协议的 。
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是传输控制层协议 。
ws+socket.io 精读Websocket原理大全需知,以及具体使用

文章插图
 
2.5 WebSocket 特点以及常见概念
  • 支持浏览器/Nodejs环境
  • 支持双向通信
  • API简单易用
  • 支持二进制传输
  • 减少传输数据量
2.5.1 长轮询http 长轮询是服务器收到请求后如果有数据, 立刻响应请求; 如果没有数据就会 hold 一段时间,这段时间内如果有数据立刻响应请求; 如果时间到了还没有数据, 则响应 http 请求;浏览器受到 http 响应后立在发送一个同样http 请求查询是否有数据;
ws+socket.io 精读Websocket原理大全需知,以及具体使用

文章插图
 
2.5.2 短轮询:客户端不管是否收到服务端的response数据,都会定时向服务端发送请求,查询是否有数据更新 。http 短轮询的局限是实时性低;
ws+socket.io 精读Websocket原理大全需知,以及具体使用

文章插图
 
长轮询与短轮询两者相同点: 可以看出 http 长轮询和 http 短轮询的都会 hold 一段时间;
长轮询与短轮询两者不同点 间隔发生在服务端还是浏览器端: http 长轮询在服务端会 hold 一段时间, http 短轮询在浏览器端 “hold”一段时间; 应用: http长轮询一般用在 web im, im 实时性要求高, http 长轮询的控制权一直在服务器端, 而数据是在服务器端的,因此实时性高;
http 短轮询一般用在实时性要求不高的地方, 比如新浪微薄的未读条数查询就是浏览器端每隔一段时间查询的. setInterval
2.5.3 长连接
  1. 长连接是指的TCP连接,而不是HTTP连接
  2. 长连接意味着连接会被复用
  3. 服务器和客户端都设置 Connection: keep-alive
  4. 现在基本用的HTTP1.1协议,HTTP1.1默认长连接
所谓 http 长连接, 就是多个 http 请求共用一个 tcp 连接; 这样可以减少多次临近 http 请求导致 tcp建立关闭所产生的时间消耗. http 1.1 中在请求头和相应头中用 connection字段标识是否是 http长连接, connection: keep-alive, 表明是 http 长连接; connection:closed, 表明服务器关闭 tcp 连接.
与 connection 对应的一个字段是 keep-live, http 响应头中出现, 他的格式是 timeout=30,max=5, timeout 是两次 http 请求保持的时间(s), , max 是这个 tcp 连接最多为几个 http请求重用
指在一个TCP连接上可以发送多个数据包,在TCP连接保持期间,如果没有数据包发送,则双方就需要发送心跳包来维持此连接 。连接过程: 建立连接——数据传输——…——(发送心跳包,维持连接)——…——数据传输——关闭连接
好处:
比如请求一个普通的网页,这个网页里肯定包含了若干css、JS等一系列资源,如果是短连接(也就是每次都要重新建立TCP连接)的话,那每次打开一个网页,基本就要建立几个甚至几十个TCP连接,浪费很多网络资源 。如果是长连接的话,那么这么多HTTP请求(包括请求网页的内容、CSS文件、JS文件、图片等)都是使用的一个TCP连接,显然可以节省很多资源 。


推荐阅读