保存用户提交聊天内容 简易版本:
主要なHTTP长接続部分、chat_content。 php文件:
コードの説明: 06. タイムアウトを設定します。長時間の HTTP 接続を維持する必要があるため、この時間はおそらく数時間ほど長くなる必要があります。また、上記の記事では、閲覧デバイスの制限により、これらの長い HTTP 接続は 2 つしか開くことができないと説明されています。 。加えて 実際には、タイムアウトなしを設定した場合でも、サーバー部分 (Apache など) の設定ファイルによって HTTP リクエストの最大待ち時間が設定される場合もあるため、一般的にはデフォルトで考えられているような効果が得られない可能性があります。 15分タイムアウト。もし 興味があれば、自分で変更してみることもできます。 09. ここに空白のセクションが出力されていますが、これは主にマニュアルで IE ブラウザが最初の 256 文字を直接出力しないと説明されているため、最初に空白を何気なく出力して以降の内容を出力できるようにし、おそらく他のブラウザには他のブラウザもあります ブラウザの設定については、PHPマニュアルのfrush関数の説明を確認してください。次の 11 行と 12 行は、これらの空白文字をブラウザに強制的に出力させるためのものです。 13. ~ 20. ここでの主な目的は、この行の終わりから内容を読み取ることができるようにファイルの行数を計算することです。 以下のwhileループは、ファイルの最後に到達したかどうかを毎回判定して出力するループで、現在の検出は間違いありません。それ以外の場合は、その行が読み取られて出力されます。 針は 1 行前進して循環を続け、毎回 1000 マイクロ秒待機します。 39. 長時間の接続が維持される場合、クライアントが切断されても、サーバーはクライアントが切断されたことを認識できない可能性があるため、各ユーザーがハートビート フラグを保持する、各グリッドの更新など、ここでいくつかのハートビート レコードが必要になる場合があります。数秒以内に 最終ハートビート時刻が長期間更新されていない場合、この無限ループが開始され、HTTP 接続が閉じられます。 デモの例 2: 従来の B/S 構造アプリケーションはすべて「クライアント プル」を使用して、クライアントとサーバー間のデータ交換を実現します。 この記事では、Ticks を組み合わせてサーバープッシュ型の PHP チャット ルームのシンプルなアイデアを実装します。 PHPer、特に set_cookie, header を使用したことのある人は、次のプロンプト メッセージを目にしたことがあるはずです: 「警告: ヘッダー情報を変更できません - ヘッダーはすでに... によって送信されています。」 これは、通信が HTTP プロトコルを介して行われるためです。 、データ パケットには 2 つの部分が含まれ、1 つはヘッダー、もう 1 つはデータです。 一般的に、ヘッダー部分が最初に開始され、データ部分の長さがヘッダー部分で指定され、次に \r\n\r\n を使用してヘッダー部分の終わりを示し、その後にデータ部分が続きます。 。 何か出力がある場合は、ヘッダー部分が送信されます。このとき、ヘッダー関数を使用してヘッダー部分のドメイン情報を変更すると、上記のプロンプト情報が得られます。 簡単な解決策は、output_buffering を使用することです。サーバーの出力をキャッシュし、ヘッダー部分をクライアントにあまり早く送信しないようにします。 それでは、output_buffering が使用されない場合、サーバーが出力するたびに、それがすぐにクライアントに送信されるようにすることはできるのでしょうか? 次の実験を行ってください。
//php.iniでoutput_buffering=0を設定します set_time_limit(0);
|