私はAJAX long-pollingで遊んでいて、ボタンをクリックしてMySQLセルの単純なカウンタ(数値)を読み込み/更新しようとしています。Ajax/PHPの長いポーリングの結果が503エラー
PHPは無限ループを作成し、対応するセルの値が変更されているかどうかを確認します(MySQL "current_timestamp"、UNIX)。それがあり、current_timestampの値がAJAX呼び出しのタイムスタンプより大きい場合、それはループを破り、更新された値と更新されたcurrent_timestampをクライアントに送信します。 AJAXはデータを処理します。
問題:これは動作しますが、しばらくしてから503エラーが表示されます。私はそれが明らかにwhileループまたは他のブラウザ(テスト用)の複数のウィンドウを介して他の開いている接続だと思います。
PHP-ファイルtext.php:
// Connect to database
$con = mysql_connect('XX', 'XX', 'XX');
if (!$con)
{
die('Error' . mysql_error());
}
mysql_select_db('X', $con);
// Get data
$query = mysqli_query("SELECT counter_value, last_modified FROM content WHERE X = 'X' ORDER BY X DESC");
// Start infinite loop
set_time_limit(0);
while (true)
{
// The timestamp of the last ajax call = the last modified timestamp
$last_ajax_call = $_GET['timestamp'];
clearstatcache();
// Get the value of the counter and the last modified timestamp
while($row = mysql_fetch_array($query))
{
$counter_value = $row['counter_value'];
$last_modified= strtotime($row['last_modified']);
}
// If the time of the last modified timestamp is bigger/later than the last ajax call
if ($last_modified > $last_ajax_call)
{
$result = array(
'counter_value' => $counter_value,
'timestamp' => $last_modified
);
$json = json_encode($result);
echo $json;
break;
// If not, try again in 3 seconds
} else
{
sleep(3);
continue;
}
}
// Close database
mysql_close($con);
AJAXパートJS-ファイルで:
だから、結果は約後に消える503エラーです10分、それは再び働いている。
(フォーマットタイプミスは/コードをクリーンアップの結果かもしれません。) は、私はちょうどPHPとJSを学び始めたので、そこにはいくつか初心者間違いや奇妙なラインがあるかもしれない、いいことしてください。コードを最適化するためのアドバイスは非常に高く評価されています!
あなたのgetContent関数は、それ自身を呼び出していて、ajaxは非同期であるため、無限ループになります。 fyi:実際に行っているものに使用するのが簡単なgetJSONというjQueryメソッドがあります。 私は、リアルタイムのTCPソケットをシミュレートしようとしています。 WebSocketプロトコルを使用しているNode.jsとsocket.ioを見ましたか? –