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来配合,因为需要相同的协议才能进行通讯。


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

查看所有标签

猜你喜欢:

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

The Mechanics of Web Handling

The Mechanics of Web Handling

David R. Roisum

This unique book covers many aspects of web handling for manufacturing, converting, and printing. The book is applicable to any web including paper, film, foil, nonwovens, and textiles. The Mech......一起来看看 《The Mechanics of Web Handling》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具