HTTPool-异步交互数据+进程池

HTTPool是XMLHTTP封装类,除了异步交互数据外增加了进程池的功能,进程池中存放着正在数据交互的进程,等待交互的进程,交互完毕的进程。 HTTPool的进程池初始是空的,有交互请求时,会检查池中是否有已交互完毕的进程,如果没有将会创建新的进程,并进入进程池。
交互完毕,HTTPool会调用进程的回调函数,进程变为交互完毕状态,可以被以后的交互请求所使用。
如果请求交互时进程池中活跃进程已达到最大值,会进入等待队列,一旦有进程交互完成或超时取消,将会启动最早进入等待队列的进程。
HTTPool会实时检查正在交互的进程数目,如果有进程超时,将会中止进程的交互操作,进入交互完毕状态,可以被以后的交互请求使用。

 

下载:HTTPoolv0.1.ZIP 、HTTPoolv0.1_min.js 、HTTPoolv0.1.js

 

授权

HTTPool封装类代码可以使用在开源或商业软件上,可以随意下载和传播,但是必须在代码中保留版权信息。

  

HTTPool提供的方法:

HTTPool.len()
功能:获取当前池中进程数目。
参数:无

  

HTTPool.lenLive()

功能:获取进程池中正在交互的进程数目。
参数:无
返回值:进程数目。

  

HTTPool.lenWait()

功能:获取进程池中正在等待的进程数目。
参数:无
返回值:进程数目。

 

HTTPool.Max(m)

功能:获取或设置进程池最大长度配置,建议为25,视交互需要而定,建议不要太大。
参数:整数,可缺省,缺省为25。
返回值:进程池最大长度。

  

HTTPool.liveMax(m)

功能:获取或设置活跃进程最大数配置,建议为5个,如果考虑老版本浏览器可以改为2。
参数:整数,可缺省,缺省为5。
返回值:活跃对象最大数。

  

HTTPool.timout(m)

功能:获取或设置进程超时限制配置,建议为10秒,视情况而定。
参数:整数,单位秒,可缺省,缺省为4。
返回值:进程池最大长度。

  

HTTPool.PID()

功能:获取下一个进程ID,此ID用于等待队列的排队和请求数统计,调用此方法后下一个进程PID会自动加1。
参数:无
返回值:下一个进程ID。

  

HTTPool.getHTTP()

功能:获取一个进程对象。
参数:无
返回值:进程对象。
如:
var obj = HTTPool.getHTTP();
obj.url = 'time.php?' + Math.random();
obj.method = "GET";
obj.callback = OKTest;
obj.callBackError = errTest;
obj.PID = HTTPool.PID(); // 设置进程ID,参考HTTPool.PID()的说明。
obj.arg = i;
obj.wait = true; // 设置进入等待队列,如果正在交互的进程数没有达到最大值,将会在0.1秒内启动此进程。
// HTTPool.sendRequest(obj); // 直接启动此进程,无视进程数最大值
属性和HTTPool.send的参数保持一致,参考HTTPool.send的参数说明。
这种进程对象方式等同于使用HTTPool.sendGet()或HTTPool.send()。

  

HTTPool.sendRequest(o)

功能:启动进程交互。此操作不理会进程池的活跃进程是否达到最大数,在请求数比较多时慎用。
参数:
            o,进程对象,可以把HTTPool.getHTTP()方法获取的进程对象修改属性后用此方法启动。
返回值:无

  

HTTPool.clearPool()

功能:清空进程池。
参数:无
返回值:无

 

      HTTPool.send(url, method, callback, data, urlencoded, callBackError)

功能:接受交互请求,如果进程池中正在交互的进程达数到最大值,将请求放入等待队列,否则进行数据交互。
参数:
            url,字符串,进行数据交互的URL地址。
            method,字符串,GET或POST,交互类型。
            callback,函数,交互完成将会调用此函数,可以缺省。
            data,字符串,交互类型是POST,data将作为POST的数据处理,否则无效。
            urlencoded,布尔值,是否设置HTTP头带有URL编码类型,POST类型才有效,可缺省。
            callBackError,函数,当发生超时或错误时调用此函数,可以缺省。
返回值:无

  

HTTPool.sendGet(url, callback, callBackError)

功能:接受GET请求,HTTPool.send的简化版,功能参照HTTPool.send。
参数:
            url,字符串,进行数据交互的URL地址。
            callback,函数,交互完成将会调用此函数。
            callBackError,函数,当发生超时或错误时调用此函数。
返回值:无

  

HTTPool.sendPost(url, data, callback, callBackError)

功能:接受POST请求,HTTPool.send的简化版,功能参照HTTPool.send。
参数:
            url,字符串,进行数据交互的URL地址。
            callback,函数,交互完成将会调用此函数。
            data,字符串,交互类型是POST,data将作为POST的数据处理,否则无效。
            callBackError,函数,当发生超时或错误时调用此函数。
返回值:无

 

回调函数将会获得一个参数,参数是一个XMLHTTP对象的引用,可以用对象的属性responseText或responseXML获取返回数据。

 

例如: 

function OKTest(s, arg) {
        document.getElementById('outHTML').innerHTML += " " + arg + " callback data:" + s.responseText;
}
function errTest(s, arg) {
        document.getElementById('outHTML').innerHTML += " " + arg + " errcallback";
}

HTTPool.sendGet('time.php?' + Math.random(), 1, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 2, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 3, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 4, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 5, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 6, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 7, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 8, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 9, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 10, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 11, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 12, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 13, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 14, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 15, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 16, OKTest, errTest);
HTTPool.sendGet('time.php?' + Math.random(), 17, OKTest, errTest);
同时向HTTPool对象提出17个交互请求,HTTPool对象会根据提出的先后顺序安排交互。

测试用的time.php代码:
<?php 
$rand = rand(1, 8); 
sleep($rand);// 暂停上面得到的随机的秒数,1~8
echo $rand; 
?>

IE7下的HTTPWatch截屏:
IE7下的HTTPWatch截屏

Firefox3.6下的firebug截屏:
Firefox3.6下的firebug截屏

chrome开发工具截屏:
chrome开发工具截屏

Opera截屏:
Opera截屏


1 callback data:1
4 callback data:3
5 callback data:2
0 errcallback
2 errcallback
3 callback data:4
6 errcallback
7 errcallback
8 errcallback
9 errcallback
10 errcallback
11 callback data:2
12 errcallback
13 errcallback
14 errcallback
15 callback data:4
18 callback data:1
19 callback data:1
17 callback data:2
16 callback data:4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值