最初に、新しいプログラマーを助けてくれた素晴らしい人々に感謝したいと思います。
ロングポーリングについて質問です。コメット プログラミングのロング ポーリング手法に関する記事をいくつか調べました。サーバー側にいくつかのスクリプトをインストールする必要がある場合もあるため、この方法は私には非常に難しいようです。
今、ロングポーリングの例を見つけました。うまく機能していますが、それが適切な方法であるかどうかはわかりません。サンプル スクリプトは、チャットのようなアプリケーションに関するものです。この php スクリプトは次のように機能します。
- php スクリプトは、data.txt ファイルが変更されるまで継続的にチェックします。
- data.txt が変更されるとすぐに、新しいテキストが Web ページに出力されます。
phpスクリプトは次のとおりです。
<?php
$filename = dirname(__FILE__).'/data.txt';
// store new message in the file
$msg = isset($_GET['msg']) ? $_GET['msg'] : '';
if ($msg != '')
{
file_put_contents($filename,$msg);
die();
}
// infinite loop until the data file is not modified
$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
$currentmodif = filemtime($filename);
while ($currentmodif <= $lastmodif) // check if the data file has been modified
{
usleep(500000); // sleep 500ms to unload the CPU
clearstatcache();
$currentmodif = filemtime($filename);
}
// return a json array
$response = array();
$response['msg'] = file_get_contents($filename);
$response['timestamp'] = $currentmodif;
echo json_encode($response);
flush();
?>
質問を簡単にするために、Webページのコードは含めていません。Web ページには、変更されるたびに data.txt のテキストを表示する div のみがあります。
私の質問の主なポイントは次のとおりです。
- このループ方法は、サーバーを長くポーリングする適切な方法ですか?
- また、サーバーが実行中の場合、
sleep();
他の同時リクエストはどうなりますか? - 長いポーリングの連続スクリプトによるサーバーの負荷を軽減する手法はありますか?
- この長いポーリング リクエストを開始したクライアントが切断された場合、その切断されたクライアントのスクリプトをどのように認識して停止できますか?
この問題について親切に案内してください...ありがとう