長い接続の問題 [アドバイスを求めています]
長い接続を実装したいです。
クライアントは js を使用してサーバーにリクエストを送信します。リクエストを受信した後、php はいくつかの処理を実行します (curl を使用して)。他の場所から情報を取得します))、それをクライアントにプッシュします。このとき、クライアント (JS) が情報を受信して処理した後、この長い接続を使用してどのように情報をサーバーに送信できますか?
同様の方法で長い接続を実装します。この種の長い接続はクライアントがサーバーにリクエストを送信するときのみ可能で、後続のリクエストはプッシュのみ可能であるというのは本当ですか。サーバーからクライアントにコンテンツを送信する場合、クライアントはこの接続を使用してサーバーにコンテンツを送信できますか?
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
header("Content-Type:text/html");
set_time_limit(0);
$num = 3;
while($num){
$num--;
print str_repeat(" ", 4096);
echo date("H:i:s")."<br/>";
ob_flush();
flush();
sleep(2);
}
ob_end_flush();
ログイン後にコピー
- -----解決策- ------------------
いわゆる「長い接続」とは、データが返されるのを待つのに長い時間がかかる接続です
サーバーはクライアントに「プッシュ」せず、長い時間が経過した後にデータをクライアントに「返す」だけです
「長い接続」をシミュレートする実装では
戻りデータを受信した後、クライアントの ajax はすぐに新しいラウンドの接続を開始します
サーバーの PHP は常に待機しているわけではありません。あなたのように無限ループですが、出力が完了すると、ループから抜け出してプログラムの実行を終了します。
------解決策----------------------クライアントプログラムに送信して、jsをアクティブ化します。この関数は、ajax を介してデータを PHP のメソッドに送り返します。その時点で接続は確実に存在しなくなり、キャッシュに保存することはできなくなります。
------解決策---------AJAX タイマーポーリングを使用してください、この世界にはありませんHTTP の長い接続。
------解決策------------------
ajax を使用する場合、データがロードされているかどうかを判断するために常に readState == 4 を使用します (status == 200 はエラーがないことを意味します)
ご期待どおり、readyState == 3 (つまり、データが到着したらデータの削除を開始します)
しかし、この信号は Firefox でのみ信頼できます
Firefox は、Netscape 社が倒産したときにリリースされた Netscape ブラウザのソース コードに基づいて開発されました
Netscapeブラウザ自体はサーバープッシュをサポートしていますが、当時主流だったIEはサーバープッシュをサポートしていなかったため、この技術は開発できませんでした
ほとんどのブラウザメーカーが自社のブラウザにbtおよびp2p技術を導入すると、サーバープッシュが行われると推定されています本格的な開発が可能になります