socket.io通讯原理

栏目: Html5 · 发布时间: 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种类型:

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


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

查看所有标签

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

这就是OKR

这就是OKR

【美】约翰·杜尔(John Doerr) / 曹仰锋、王永贵 / 中信出版社 / 2018-12 / 68.00元

这本书是传奇风险投资人约翰·杜尔的作品,揭示了OKR这一目标设定系统如何促使英特尔、谷歌等科技巨头实现爆炸性增长,以及怎样促进所有组织的蓬勃发展。 20世纪70年代,在英特尔担任工程师时,杜尔首次接触到OKR。之后,作为一个风险投资人,杜尔不遗余力地将这一管理智慧,分享给50多家公司和机构,包括谷歌、亚马逊、领英、脸书、比尔及梅琳达·盖茨基金会,甚至摇滚歌手波诺的公益项目。在杜尔的帮助下,任......一起来看看 《这就是OKR》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具