Javascript Ajax总结——其他跨域技术之Comet
Comet指一种更高级的Ajax技术( 也称 “服务器推送” ),一种服务器向页面推送数据的技术。Comet能够让信息近乎实时地被推送到页面上,非常适合体育比赛的分数和股票报价。
有两种实现Comet的方式:长轮询、流
传统轮询(也称短轮询),即浏览器定时向服务器发送请求,看有没有更新的数据。
长轮询把短轮询颠倒了一下。页面发起一个到服务器的新请求,然后服务器一直保持连接打开,直到有数据可发送。发送完数据之后,浏览器关闭连接,随即又发送一个到服务器的新请求。这一过程在页面打开期间一直持续不断。
轮询的优势是所有浏览器都支持,因为使用XHR对象和setTimeout()就能实现。而你要做的就是决定什么时候发送请求。
HTTP流,在页面的整个生命周期内只使用一个HTTP连接。浏览器向服务器发送一个请求,而服务器保持连接打开,然后周期性地向浏览器发送数据。
如,下面这段PHP脚本就是采用流实现的服务器中常见的形式:
1 <?php
2 $i = 0;
3 while(true){
4 //输出一些数据,然后立即刷新输出缓存
5 echo "Number is $i";
6 flush();
7 //等几秒钟
8 sleep(10);
9 $i++;
10 }
11 ?>
所有服务器语言都支持打印到输出缓存然后刷新(将输出缓存中的内容一次性全部发送到客户端)的功能。而这正是实现HTTP流的关键所在。
Firefox、Safari、Opera、Chrome中,通过侦听readystatechange事件及检测readyState的值是否为3,就可以利用XHR对象实现HTTP流。随着不断从服务器接收数据,readyState的值会周期性地变为3,。当readyState值变为3时,responseText属性就会保存接收到的所有数据。此时,比较此前接收到的数据,决定从什么位置开始取得最新的数据。使用XHR对象实现HTTP流的典型代码:
1 function createStreamingClient(url, progress, finished){
2 var xhr = new XMLHttpRequest(),
3 received = 0;
4 xhr.open("get, url, true");
5 xhr.onreadystatechange = function(){
6 var result;
7 if(xhr.readyState ==3){
8 //只取得最新数据并调整计数器
9 result = xhr.responseText.substring(received);
10 received += result.length;
11 //调用progress回调函数
12 progress(result);
13 } else if (xhr.readyState ==4){
14 finished(xhr.response);
15 }
16 };
17 xhr.send(null);
18 return xhr;
19 }
20 var client = createStreamingClient("streaming.php", function(data){
21 alert("Received: " + data);
22 }, function(data){
23 alert("Done!");
24 });
这个例子能在大多数浏览器中正常运行(IE除外),但管理Comet连接很容易出错,需要时间不短改进才能达到完美。
Javascript Ajax总结——其他跨域技术之Comet的更多相关文章
- js-其他跨域技术(JSONP`Comet)
###1. JSONP JSONP由两部分组成:回调函数和数据 JSONP是通过动态<script>元素来使用的,使用时可以为src属性指定一个跨域URL eg: function ha ...
- 06: AJAX全套 & jsonp跨域AJAX
目录: 1.1 AJAX介绍 1.2 jQuery AJAX(第一种) 1.3 原生ajax(第二种) 1.4 iframe“伪”AJAX(第三种) 1.5 jsonp跨域请求 1.6 在tornad ...
- js中ajax如何解决跨域请求
js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...
- ajax请求ashx跨域问题解决办法
ajax请求ashx跨域问题解决办法 https://blog.csdn.net/windowsliusheng/article/details/51583566 翻译windowsliusheng ...
- 原生JavaScript封装的jsonp跨域请求
原生JavaScript封装的jsonp跨域请求 <!DOCTYPE html> <html lang="en"> <head> <met ...
- JavaScript JSON AJAX 同源策略 跨域请求
网页和Ajax和跨域的关系 1 Ajax使网页可以动态地.异步地的与服务器进行数据交互,可以让网页局部地与服务器进行数据交互 2 Ajax强调的是异步,但是会碰到跨域的问题. 3 而有很多技术可以解决 ...
- AJAX请求和跨域请求详解(原生JS、Jquery)
一.概述 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX = 异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数 ...
- (转)jquery ajax使用及跨域访问解决办法
原文地址:***/UIweb/jquery_ajax_kuayujiejue.html 最近开发中,设计到智能手机项目,给领导做几个demo.主要是用jquery和jqeury mobile. 越来越 ...
- Ajax【介绍、入门、解决Ajax中文、跨域、缓存】
什么是Ajax Ajax(Asynchronous JavaScript and XML) 异步JavaScript和XML Ajax实际上是下面这几种技术的融合: (1)XHTML和CSS的基于标准 ...
- JavaScript使用jsonp实现跨域
为什么要把ajax跨域写一下呢,因为ajax跨域并不是想跨就能跨的.因为为了安全,ajax是不允许跨域的. 举个例子,你有一个卖水果的网站,你的ajax请求另一个网站提供的图片,正常的时候,图片是一个 ...
随机推荐
- MySQL实战实战系列 00 开篇词 这一次,让我们一起来搞懂MySQL
你好,我是林晓斌,网名"丁奇",欢迎加入我的专栏,和我一起开始 MySQL 学习之旅.我曾先后在百度和阿里任职,从事 MySQL 数据库方面的工作,一步步地从一个数据库小白成为 M ...
- ionic4请求skynet服务器的资源跨域问题
最近在做一个后台接口, 顺便用ionic4写了个简单的管理后台, 本来skynet管理后台监听的端口是6666, 但是发现chrome默认对一些接口不友善, 虽然可以通过设置启动参数来解决, 但是还是 ...
- DevOps|研发效能团队组织架构和能力建设
研发效能团队相对于各个公司主营业务规模来说并不是很大,但是在经历的几家公司里主要是有两种组织架构,职能独立型组织架构和业务闭环型组织架构.本文主要讲解这两种组织架构的特点.优劣.劣势. 业务闭环组织架 ...
- 2022 ICPC 杭州站
gym 知乎 尝试先读题而不是写缺省源感觉不太好 E 一头雾水.F 是签到就先上去写了,结果读错题交了个样例都没过的代码,小改了一下就过了.G 不太会做.zsy 把 M 丢给我想了一下 然后 gjk ...
- ProcessingJS
ProcessingJS 图形 rect(x, y, w, h)(在新窗口中打开) ellipse(x, y, w, h) triangle(x1, y1, x2, y2, x3, y3) line( ...
- [CISCN 2019华东南]Web11
看到下面connection 里面的内容有一点像抓包出来的 就抓包试试 似乎感觉也没有什么用 看到这个东西,那么就想到改IP 添加X-Forwarded-For:127.0.0.1 发现这个IP随着我 ...
- math库常用函数+产生随机数总结
math库常用函数+产生随机数总结 1.对x开平方 double sqrt(x)://返回值为double类型,输入的x类型随意,只要是数的类型 2.求常数e的x次方 double exp(x);// ...
- Unity - UIWidgets 7. Redux接入(二) 把Redux划分为不同数据模块
参考QF.UIWidgets 参考Unity官方示例 - ConnectAppCN 前面说过,当时没想明白一个问题,在reducer中每次返回一个new State(), 会造成极大浪费,没想到用什么 ...
- ResNet详解:网络结构解读与PyTorch实现教程
本文深入探讨了深度残差网络(ResNet)的核心概念和架构组成.我们从深度学习和梯度消失问题入手,逐一解析了残差块.初始卷积层.残差块组.全局平均池化和全连接层的作用和优点.文章还包含使用PyTorc ...
- stable-diffusion-webui官方版本地安装教程
stable-diffusion-webui官方版本地安装教程 最终效果 1. python安装 官网:https://www.python.org/downloads/release/python- ...