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将数据传输部分独立出来形成了 , 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轮询,功能完备,设计优雅,是开发实时双向通讯的不二手段。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。