欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

socket.io学习教程之基础介绍(一)

程序员文章站 2022-10-10 15:29:15
前言 web端与服务器间的实时数据传输的是一个很重要的需求,但最早只能通过ajax轮询询实现。在websocket标准没有推出之前,ajax轮询是唯一可行的方式(通过...

前言

web端与服务器间的实时数据传输的是一个很重要的需求,但最早只能通过ajax轮询询实现。在websocket标准没有推出之前,ajax轮询是唯一可行的方式(通过flash浏览器也可以,但这里不做讨论)。ajax轮询原理是设置定时器,定时通过ajax同步服务器数据。这种方式存在延时且对服务端造成很大负载。直到2011年,ietf才标准化websocket——一种基于tcp套接字进行收发数据的协议。现如今主流浏览器均已支持websocket。

socket.io学习教程之基础介绍(一)

socket.io将数据传输部分独立出来形成了 ,  engine.io对websocket和ajax轮询进行封装,形成一套api,屏蔽了细节差异和兼容性问题,实现了跨浏览器/跨设备进行双向数据。

socket.io对engine.io不是必须的,你也可以实现自己的engine.io,通过server.bind绑定

应用

  • 实时数据分析展示(报表,日志)
  • 即时通讯、聊天,
  • 二进制流(图片,音乐,视频)传输
  • 多人协同编辑
  • 即时消息推送

类似技术

  • ajax轮询: 基于xmlhttprequest的ajax轮询
  • ajax长轮询: 类似轮询,服务器在客户端请求后不返回响应,直到有数据需要传到客户端,传完数据后客户端再发起新的请求。缺点是要额外传输的http头,保持住请求不响应也需要一些额外工作。
  • http流: 与ajax长轮询类似,服务端响应会带上http头: transfer-encoding: chunked,返回完数据到客户端后客户端也不需要发起新的请求,缺点是各个chunk之间的数据难以识别和处理。
  • 插件: 类似flash,silverlight, 作为插件越来越被主流浏览器和用户排斥

下面就不同角度对各技术进行分析

  • 单向/双向
  • 单向: ajax轮询,ajax长轮询,http流
  • 双向: websocket, 插件
  • 延时

websocket < 插件 < http流 < ajax长轮询 < ajax轮询

1、效率

插件 > websocket > http流 > ajax长轮询 > ajax轮询

1、移动端支持

websocket: 基本均支持

http流,ajax长轮询,ajax轮询: 基本均支持

插件: 基本不支持

1、开发或设置难易程度

websocket < ajax轮询 < 插件 < ajax长轮询,http流

总结

socket.io封装了websocket,不支持websocket的情况还提供了降级ajax轮询,功能完备,设计优雅,是开发实时双向通讯的不二手段。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。