質問: 現在チャットを作成中なのですが、cometを使い 1.ajaxでphpにリクエスト 2.phpでデータベースをチェック、変化があるまでループで待機 変化があれば値を返す といった感じで書き込みを表示させているのですが 2.でのwhileでループ中に 504 Gateway Timeout とでてしまいます。 どうすればいいでしょうか ``` if (isset($_GET["state"])&&$_GET["state"]==="monitoring") { $sql=sprintf('SELECT p.* FROM chat_posts p ORDER BY p.res_created DESC LIMIT 1 '); $posts=mysqli_query($db,$sql) or die(mysqli_error($db)); $post=mysqli_fetch_assoc($posts); $lastres=$post["res_created"]; $newres=$lastres; while ($newres===$lastres) {//書き込みがあるまでループ $sql=sprintf('SELECT p.* FROM chat_posts p ORDER BY p.res_created DESC LIMIT 1 '); $posts=mysqli_query($db,$sql) or die(mysqli_error($db)); $post=mysqli_fetch_assoc($posts); $newres=$post["res_created"]; session_write_close(); sleep(1); if($newres!==$lastres){//書き込みがあった場合全書き込みを渡す $sql=sprintf('SELECT p.* FROM chat_posts p ORDER BY p.res_created DESC '); $posts=mysqli_query($db,$sql) or die(mysqli_error($db)); while ($post=mysqli_fetch_assoc($posts)) { $res[]=array( 'postnum'=>3, 'num'=>$post['res_id'], 'name'=>$post['res_name'], 'res'=>$post['res'], 'time'=>$post['res_created'] ); } header(' Content-type:application/json; charset=utf-8 ' ); header(' X-Content-Type-Option:nosniff ' ); echo json_encode( $res,JSON_HEX_TAG | JSON_UNESCAPED_UNICODE | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP );# code...# code...# code... break; } } } ```
回答: ``` set_time_limit(0); ``` で、timeoutさせないようにするのと、 定期的にクライアント側からも生存確認を吐かせてサーバーからレスポンスを返すのでいけるかな。