socket.io通讯原理

栏目: Html5 · 发布时间: 5年前

内容简介:socket.io是一个跨浏览器支持WebSocket的实时通讯的JS,封装了WebSocket和轮询等方法,会根据情况选择方法来进行通讯。支持客户端&服务端,编程体验统一。底层使用engine.io 封装了一层协议。engine.io使用websocket时有一套自己的ping/pong机制,使用的是opcode为0x1(Text)类型的数据帧,不是websocket协议规定的ping/pong类型的帧engine.io的数据编码分为Packet和Payload,其中 Packet是数据包,有7种类型:

socket.io是一个跨浏览器支持WebSocket的实时通讯的JS,封装了WebSocket和轮询等方法,会根据情况选择方法来进行通讯。支持客户端&服务端,编程体验统一。底层使用engine.io 封装了一层协议。

数据编码

engine.io使用websocket时有一套自己的ping/pong机制,使用的是opcode为0x1(Text)类型的数据帧,不是websocket协议规定的ping/pong类型的帧

engine.io的数据编码分为Packet和Payload,其中 Packet是数据包,有7种类型:

  • 0 open:从服务端发出,标识一个新的传输方式已经打开。
  • 1 close:请求关闭这条传输连接,但是它本身并不关闭这个连接。
  • 2 ping:客户端周期性发送ping,服务端响应pong。
  • 3 pong:服务端发送。
  • 4 message:实际发送的消息。
  • 5 upgrade:在转换transport前,engine.io会发送探测包测试新的transport(如websocket)是否可用,如果OK,则客户端会发送一个upgrade消息给服务端,服务端关闭老的transport然后切换到新的transport。
  • 6 noop:空操作数据包,客户端收到noop消息会将之前等待暂停的轮询暂停,用于在接收到一个新的websocket强制一个新的轮询周期。

Payload是指一系列绑定到一起的编码后的Packet,它只用在poll中,websocket里面使用websocket帧里面的Payload字段来传输数据。

// Payload格式
<length1>:<packet1>[<length2>:<packet2>[...]]
复制代码
/** polling模式返回值
 * 这里总共有两个packet
 * 第一个长度为96,packet类型为open
 * 第二个长度为2,packet类型为message
 **/
96:0{"sid":"WJT_1iJwliSggnDFAAAB","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000}2:40
复制代码

链接过程

socket.io与websocket的链接过程有所不同,多了兼容模式以及心跳的模式。下图的模式采用的是兼容模式, transport: ['polling', 'websocket']

socket.io通讯原理

1.客户端发起polling请求

socket.io通讯原理

2.服务端同意请求,返回 0

socket.io通讯原理

3.客户端继续发起polling,请求数据

socket.io通讯原理

4.客户算发起webscoket握手请求

5.服务端同意链接websocket,此时状态码为101

socket.io通讯原理

6.客户端发送websocket探测帧:2probe(ping)

7.服务端返回对应探测帧:3probe(pong)

8.客户端发送polling升级为websocket:5(upgrade)

socket.io通讯原理

9.服务端同意发送noop消息停止polling:6(noop)

socket.io通讯原理

10.websocket定时心跳(2/3)&收发数据(4)

socket.io通讯原理

transport: ['polling'] 的时候,只会使用polling来进行通讯

transport: ['websocket'] 的时候,只会使用websocket来进行通讯

transport: ['polling', 'websocket'] 两者同时存在时,就会看浏览器兼容性进行选择

写在最后

socket.io进行了兼容性处理,使用起来也十分方便,不过要注意,当后端使用socket.io实现时,前端也需要使用socket.io来配合,因为需要相同的协议才能进行通讯。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

订阅

订阅

[美] 罗伯特·金奇尔、马尼·佩伊万 / 中信出版集团 / 2018-12 / 68.00元

数据显示,年轻人现在每天看视频的时间已经超过电视。YouTube 平台每天的视频观看总时长超过10亿小时,这个数字还在增长。数字视频牢牢占据着人们的注意力。 数字时代如何实现创意变现?视频平台如何提升自己的品牌认知和广告号召力?想要在这个庞大的媒体生态中占据流量入口,你需要先了解 YouTube。在过去的10年里,互联网视频平台 YouTube 已经像60多年前的电影、广播和电视的发明一样,......一起来看看 《订阅》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具