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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章