目前,我試圖調用一個名爲'sniffer.php'的PHP文件。 我正在做這個異步使用javascript到一個PHP文件。我目前遇到的問題是,在PHP代碼中,我隨機添加了一個睡眠函數(以加載頁面的方式運行)。這個問題是兩個或更多的函數調用該頁面,它仍然等待,直到其中一個頁面完成,然後停止啓動另一個請求。 EG:一人睡5秒,另一人睡6秒。第一個在5秒內完成,下一個在11秒完成。我正在尋找的是5秒內完成的,而下一個完成後的一秒鐘。我不確定是否只是「睡眠」引起問題,或者因爲睡眠而導致文件被「鎖定」。多個HTTP請求到單個文件
感謝您的任何幫助/反饋。
我的PHP文件看起來是這樣的:
$c = rand(2,10);
sleep($c);
$html .= $c;
echo json_encode(array('html'=>$html,'status'=>1));
exit;
我的JavaScript類如下所示:
var path = '/';
var polling = {
add : function(name, obj) {
this[name] = new xAjax(obj);
return this;
}
};
function xAjax(options) {
var consti = {
};
var defaults = {
url: path + 'sniffer.php',
method: 'POST',
responseType: 'json',
async: true,
timeout: 30000,
success: function(response) {console.log(response);},
done: function() {},
beforeSend: function() {},
error: function(e) {console.log(e);},
abort: function() {}
};
var settings = Object.assign({}, defaults, options, consti);
var xhr = null;
this.run = function() {
xhr = new XMLHttpRequest();
settings.beforeSend();
xhr.responseType = settings.responseType;
xhr.open(settings.method, settings.url, settings.async);
xhr.timeout = settings.timeout;
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
if (xhr.status === 200) {
settings.success(xhr.response);
} else {
settings.error(xhr.response);
}
settings.done();
xhr = null;
}
};
xhr.send();
return this;
};
this.abort = function() {
xhr.abort();
xhr = null;
settings.abort();
return this;
};
this.isRunning = function() {
return xhr != null;
};
this.set = function(options) {
settings = Object.assign({}, defaults, options, consti);
return this;
};
}
我的創作/打電話到sniffer.php:
polling.add('x');
polling.x.run();
polling.add('y');
polling.y.run();
PHP會話鎖定併發請求。檢查你是否在你的PHP代碼中啓動任何會話,這將解釋它。 – jorgonor
不幸的是,睡眠會延遲當前會話的執行,而不僅僅是當前的請求。 – ADyson
你說得對。我正在開始一個會議。我假設沒有辦法繞過這一點。如果它是睡眠以外的東西(EG SQL進程),它仍然會話鎖定? – Deadweight