ユーザー間のメッセージング機能を備えた Web サイトがあります。ユーザーがログインjQuery.ajax()
すると、PHP スクリプトを呼び出して新しいメッセージをチェックします。リクエストを削減するために、私の PHP スクリプトはcheck_new_messages()
関数の呼び出しをループし、新しいメッセージがない場合sleep(5)
はループ内で呼び出し、5 秒待ってからループを続行します。を使用してスクリプトの実行時間を確認し、microtime()
60 秒を超えた場合は 0 を返します。ajax はこの値を受け取り、スクリプトを再度呼び出します。
function check_message_queue($user) {
$response = 0;
$msgs = 0;
$time_start = microtime(true);
while (!$msgs = check_new_messages($user)) {
sleep(5);
$time_end = microtime(true);
if ($time_end - $time_start >= 60)
return $response;
}
// has new messages
sleep(5);
return $response;
}
私のphp.iniはmax_execution_time
120に設定されています。
最初はすべて問題なく動作しますが、ページを更新すると約 10 秒の遅延が発生し、「最大実行時間が 30 秒を超えました」という PHP エラーが表示され、続いて Apache がクラッシュすることがあります。PHP の max_execution_time は間違いなく 120 秒に設定されているため、何が起こっているのかわかりません。
私はこれまでにこのようなことをしたことがないので、うまくいけば、私の側のコーディングが悪いだけです。
ここに私のJavaScriptがあります:
var request_new_messages = function() {
$.ajax({
url: 'messages/checkqueue',
type: 'post',
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
data: { id: 0 },
complete: function() { request_new_messages(); },
error: function(jqXHR, textStatus, errorThrown) { handle_error(); },
success:
function(data, textStatus, jqXHR) {
if (textStatus == "success") {
if (!isNaN(data)) {
var response = parseInt(data);
if (response > 0)
alert('You have ' + response + ' new messages.');
}
}
}
});
};