1. 图像ping:
原理:浏览器不会限制img标签的src属性从任何地方获取图像资源,因此,可以借此实现获取远程报文;
方法: var img = new Image(),然后在 img的onload和onerror事件中添加处理程序,将 img的src属性链接到指定的地址;
使用实例:动态广告用户点击量统计
优点: 简单易实现
缺点: 只能通过get发送请求,并且还不能获取服务器的响应报文;
2. JSONP
定义:JSONP并不是一项新技术,是JSON with padding 的缩写,是JSON应用的一种新方法,新在,JSONP是在函数中调用的JSON.
组成: JSONP由两部分组成,一部分是回调函数,一部分是数据,回调函数是指:响应到来时应该在页面中调用的函数,而数据就是传入回调函数的JSON数据。
原理: 通过动态创建script标签实现的,然后给src属性赋值指定地址,与ping图片很相似,但是JSONP的优点是能够访问响应文本,支持浏览器与服务器之间双向通信;
缺点: src源不可预测的安全问题无法解决;不方便掌控请求是否成功,虽然有onerror事件处理程序,但是浏览器支持并不理想。
3. comet (服务器推送)
定义:comet技术刚好与ajax相反,ajax是页面向服务器请求数据的过程,comet是服务器向页面推送信息的技术,适合处理即时通讯;
实现形式: 长轮询(定时向服务器发送请求,看看有没有更新的数据)、流。
长轮询与短轮询的区别: 短轮询是浏览器定期向服务器发送消息,服务器收到消息后,无论有没有新的消息,都立马返回响应报文;长轮询是,浏览器发送请求,浏览器接收到请求后一直保持响应状态,等,等有消息后,立马返回,浏览器接收到消息后,再次发起请求,以此循环。
4. SSE (server-sent-events 服务器发送事件)
使用场景:用于实时接收服务器推送来的消息,而不需要实时双向通信;
简介:SSE通信仍然是使用的http协议,SSE支持长轮询、短轮询和http流,而且能在断开时自动确定何时重新连接。
使用方法: var source = new EventSource('myevent.php'),然后就只有三个API,建立连接时触发open事件,接收到消息时触发onmessage事件,无法建立连接时触发error事件。在onmessage中接收到服务器推送过来的消息后,可以在其中处理数据。
扩展:在不方便使用websocket的情况下,但是有需要双向通信,可以考虑使用 xhr 发送消息,使用SSE实现服务器推送消息。
5. web sockets
** 使用场景**:用于服务器与浏览器实时可以互相主动推送消息,如:实时聊天室;
** 工作原理**:在JavaScript中创建一个websockets,会有一个http请求,在得到服务器响应后,http协议会变成自定义的web socket协议,目的是为了加快数据传输速度,因此,建立websocket的使用需要专门的支持websokcet协议的服务器。