CURLリクエストを機器に送信する自動同期機能があり、私が持っているすべての機器(60など)に対してこのリクエストを行います。問題は次のとおりです。
- 通信が成功した場合、正常に動作します。
- しかし、通信が失敗した場合、Webページはタイムアウトがなくなるまで待機します。だから、クライアント側は3〜4分間クラッシュします...私はその3-4分でデータのロードを停止する重要なグリッドを持っています。PHP CurlタイムアウトがクラッシュするJavascriptクライアント側
自動同期は、javascriptの関数で、以下のPHPコントローラを呼び出すAJAXリクエストを行います。どうすればこれを防ぐことができますか?他に何を試していいのかわかりません... AJAXは非同期なので、なぜWebページが停止するのか分かりません。
コントローラー:
$list = $panels_repository->getNetwork();
$thread = new PollingThread($list);
$thread->start();
$thread->join();
$result = $thread->result;
$resultLength = sizeof($result);
//...
スレッド:
class PollingThread extends Thread {
private $panels_list;
private $alarm_status;
public $result;
public function __construct($list) {
$this->panels_list = $list;
}
public function run() {
$panels_list = $this->panels_list;
$alarmsUpdated = array();
$panels = array();
foreach($panels_list as $panel) {
$alarms_list = $panel->getAlarmsList();
//Get updated alarms status
$panel->getDiagnosticStatus($alarms_list);
//Save the results
array_push($alarmsUpdated, $alarms_list);
}
$this->result = $alarmsUpdated;
}
getDiagnosticStatus
$input = "<?xml version='1.0' encoding='ISO-8859-1'?>
<?getParameters message?>
<displayMLRequest xmlns='http://www.peek.se/DisplayML/' version='1.12'
dateTime='2008-01-10T15:09:51+02:00'>
<getParameters/>
</displayMLRequest>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); //Set IP to communicate
//Set POST XML Input
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $input);
//Return response as string & TimeOuts
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//Execute
$output = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
Javascriptを:
$('#stations_tree').on('changed.jstree', function (e, data) {
//....
var dataObject = {
type: "Selected",
childrenID: childrenID_array,
parentsID: parentsID_array
};
$.ajax({
type: "POST",
url: "controllers/PanelsController/",
data: dataObject,
cache: false,
success: function()
{
$("#dg_selected_stops").jsGrid("loadData");
$("#dg_selected_pids").jsGrid("loadData");
}
});
}).jstree({
plugins: ["checkbox", "state", "types"],
"types": {
"default": {
"icon" : false
}
},
core: {
data: {
url: "json/stations.json",
dataType: "json",
success: function() {
//Save Panels Network as session variable
var dataObject = {
type: "Network"
};
$.ajax({
type: "POST",
url: "controllers/PanelsController/",
data: dataObject,
cache: false,
success: function() {
//Get EquipmentStatus for each panel
var dataType = {
type: "Save"
};
$.ajax({
type: "POST",
url: "controllers/EquipmentStatusController/",
data: dataType,
cache: false,
success: function() {
//Status Unknown
changeTreeIcons();
loadAlarmsData();
polling();
}
});
}
});
}
}
}
});
-
機能ポーリング()JSがタイムアウトするまで停止し
function polling() {
var dataObject = {
type: "Polling",
};
$.ajax({
type: 'POST',
url: "controllers/DatabaseController/",
data: dataObject,
success: function(response) {
//loadAlarmsData();
//changeTreeIcons();
}
});
}
EDITなくなって:を私は、私が始めたポーリング後にAJAX要求を行うことをしようとすることを確認していますウェブページは、PHPスクリプトが完了した後にそのリクエストを行います。そのため、ブロックするJSは、ajaxリクエストでloadDataのテーブルです。どうすれば解決できますか?
は、これらの悪いCURLの要求にスローされるすべてのエラーはありますか? –
@TheOneandOnlyChemistryBlobいいえ、getDiagnosticStatusで "test"をエコーした場合、ウェブは6-7回印刷されます。*ホスト名172.18.56.132がDNSキャッシュに見つかりました *試行172.18.56.132 ... *接続が10000ミリ秒後にタイムアウトしました *接続を閉じる0 – BackSpace
ifファイルのテストで1つのカールリクエストのみを実行すると、問題は、Webページを停止し、その後、PHPではなくJavaScriptを投稿することです –