当前位置: 首页 > 后端技术 > Node.js

Socket.io1:简介

时间:2023-04-03 18:52:53 Node.js

socket.io提供基于事件的实时双向通信历史Web客户端和服务器之间的实时数据传输是一个非常重要的需求,但只能通过AJAX来实现最早进行投票。在WebSocket标准出台之前,AJAX轮询是唯一可行的方式(通过Flash浏览器,这里不做讨论)。AJAX轮询的原理是设置一个定时器,定时通过AJAX同步服务器数据。这种方法有延迟,对服务器造成很大的负载。直到2011年,IETF才对WebSocket进行了标准化,这是一种通过TCP套接字发送和接收数据的协议。所有主流浏览器现在都支持WebSocket。socket.io将数据传输部分分离出来形成engine.io,engine.io封装WebSocket和AJAX轮询形成一套API,屏蔽了细节差异和兼容性问题,实现了跨浏览器/跨设备双向数据.engine.io不需要socket.io,你也可以自己实现engine.io,通过server.bind绑定应用实时数据分析展示(报表,日志)即时通讯,聊天,二进制流(图片,音乐,video)传输多人协同编辑即时消息推送类似技术AJAX轮询:基于XMLHttpRequest的AJAX轮询AJAX长轮询:类似于轮询,客户端请求后服务器不返回响应,直到有数据要传给client,传输完数据后,client发起新的请求。缺点是有额外的HTTP标头要传输,并且需要一些额外的工作来阻止请求响应。HTTP流:类似于AJAX长轮询,服务器响应会携带HTTP头:Transfer-Encoding:chunked。将数据返回给客户端后,客户端不需要再发起新的请求。缺点是chunk之间的数据难以识别和处理。插件:与Flash、Silverlight类似,插件越来越被主流浏览器和用户排斥。下面从不同的角度分析每一种技术。One-way/two-wayone-way:AJAXpolling,AJAXlongpolling,HTTPstreamTwo-way:WebSocket,Plug-indelayWebSocket<插件WebSocket>HTTP流>AJAX长轮询>AJAX轮询移动端支持WebSocket:基本都支持HTTP流,AJAX长轮询,AJAX轮询:基本都支持插件:基本不支持开发或设置难度WebSocket