HTTPロングコネクションの「サーバープッシュ」技術をベースにしたPHP簡易チャットルーム
HTTP 長い接続の「サーバー プッシュ」の技術原理については、IBM のこの記事を参照してください。デモを作成しました
1 つ目は、テキスト入力とチャット コンテンツを表示する iframe を含むホームページです。 、および非表示の iframe がフォームの送信に使用されます:
コードは次のとおりです:
<?php //chat.php header('cache-control: private'); header('Content-Type: text/html; charset=utf-8'); ?> <html> <script type="text/javascript"> function submitChat(obj) { obj.submit(); document.getElementsByName('content')[0].value = ''; } </script> <iframe src="./chat_content.php" height="300" width="100%"></iframe> <iframe name="say" height="0" width="0"></iframe> <form method="POST" target="say" action="./say.php" onsubmit="submitChat(this)"> <input type="text" size="30" name="content" /> <input type="button" value="say" onclick="submitChat(this.form)" /> </form> </html>
もう 1 つは、ユーザーが送信したチャットの内容をロックせずに単に書き込むことです。単純なバージョンです:
コードは次のとおりです:
<?php $content = trim($_POST['content']); if ($content) { $fp = fopen('./chat.txt', 'a'); fwrite($fp, $content . "\n"); fclose($fp); clearstatcache(); } ?>
次に、メインのHTTP長い接続部分、chat_content.phpファイルを見てみましょう:
コードは次のとおりです:
<?php header('cache-control: private'); header('Content-Type: text/html; charset=utf-8'); //测试设置30秒超时,一般会设置比较长时间。 set_time_limit(30); //这一行是为了搞定IE这个BT echo str_repeat(' ', 256); ob_flush(); flush(); $fp = new SplFileObject('./chat.txt', 'r+'); $line = 0; $totalLine = 0; while (!$fp->eof()) { $fp->current(); $totalLine++; $fp->next(); } $fp->seek($totalLine); $i = $totalLine - 1; while (true) { if (!$fp->eof()) { if ($content = trim($fp->current())) { echo '<div>'; echo htmlspecialchars($content); echo "</div>"; flush(); $fp->next(); $i++; } } else { $fp->seek($i - 1); $fp->next(); } { //这里可以添加心跳检测后退出循环 } usleep(1000); } ?>
説明します
06. 長時間の HTTP 接続の維持には確実に時間がかかり、おそらく数時間かかるため、タイムアウトを設定します。上記の記事では、次の 2 つだけについても説明しています。このような長い HTTP 接続は、ブラウザの制限により開くことができます。また、タイムアウトなしを設定した場合でも、サーバー部分(Apacheなど)の設定ファイルでHTTPリクエストの最大待ち時間が設定されている場合もあるため、一般的にはデフォルトでの効果が期待できない場合があります。 15分のタイムアウト。興味があれば、自分で変更してみることもできます。
09. ここで空白のセクションが出力されます。これは主にマニュアルで IE ブラウザが最初の 256 文字を直接出力しないと説明されているためです。そのため、最初に空白を出力して、その後の内容を出力できるようにしているのかもしれません。他のブラウザにも他のブラウザ用の設定があります。詳細については、PHP マニュアルの frush 関数の説明を確認してください。次の 11 行と 12 行は、これらの空白文字をブラウザに強制的に出力させるためのものです。
13. ~ 20. ここでの主な目的は、この行の終わりから内容を読み取ることができるようにファイルの行数を計算することです。
次の while ループは、ファイルの内容をループで出力するたびに、ユーザーがファイルに書き込む場合、現在の検出は終わりではありません。ファイルの行が読み取られて出力されます。それ以外の場合は、ポインタを 1 行進めてループを継続し、毎回 1000 マイクロ秒待機します。
39サーバーはクライアントが切断されたことを認識していない可能性があるため、たとえば、各ユーザーはハートビート フラグを保持し、最後のハートビート時間が検出されたときに、数秒ごとに最新のハートビート時間を更新する必要がある場合があります。長期間更新されなかった場合、無限ループが開始され、HTTP 接続が閉じられます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









HTTP ステータス コード 520 は、サーバーがリクエストの処理中に不明なエラーに遭遇し、より具体的な情報を提供できないことを意味します。サーバーがリクエストを処理しているときに不明なエラーが発生したことを示すために使用されます。サーバー構成の問題、ネットワークの問題、またはその他の不明な理由が原因である可能性があります。これは通常、サーバー構成の問題、ネットワークの問題、サーバーの過負荷、またはコーディング エラーが原因で発生します。ステータス コード 520 エラーが発生した場合は、Web サイト管理者またはテクニカル サポート チームに連絡して詳細情報と支援を得ることが最善です。

HTTP ステータス コード 403 は、サーバーがクライアントの要求を拒否したことを意味します。 http ステータス コード 403 の解決策は次のとおりです: 1. 認証資格情報を確認します。サーバーが認証を必要とする場合は、正しい資格情報が提供されていることを確認します。2. IP アドレス制限を確認します。サーバーが IP アドレスを制限している場合は、クライアントの IP アドレスは制限されています。ホワイトリストに登録されているか、ブラックリストに登録されていません。3. ファイルのアクセス許可設定を確認します。403 ステータス コードがファイルまたはディレクトリのアクセス許可設定に関連している場合は、クライアントがこれらのファイルまたはディレクトリにアクセスするための十分なアクセス許可を持っていることを確認してください。等

HTTP 301 ステータス コードの意味を理解する: Web ページ リダイレクトの一般的なアプリケーション シナリオ インターネットの急速な発展に伴い、Web ページの操作に対する人々の要求はますます高くなっています。 Web デザインの分野では、Web ページのリダイレクトは一般的かつ重要なテクノロジであり、HTTP 301 ステータス コードによって実装されます。この記事では、HTTP 301 ステータス コードの意味と、Web ページ リダイレクトにおける一般的なアプリケーション シナリオについて説明します。 HTTP301 ステータス コードは、永続的なリダイレクト (PermanentRedirect) を指します。サーバーがクライアントのメッセージを受信すると、

NginxProxyManager を使用して HTTP から HTTPS への自動ジャンプを実装する方法 インターネットの発展に伴い、ますます多くの Web サイトが HTTPS プロトコルを使用してデータ送信を暗号化し、データ セキュリティとユーザーのプライバシー保護を向上させ始めています。 HTTPS プロトコルは SSL 証明書のサポートを必要とするため、HTTPS プロトコルを展開する際には特定の技術サポートが必要です。 Nginx は強力で一般的に使用される HTTP サーバーおよびリバース プロキシ サーバーであり、NginxProxy

http.PostForm 関数を使用して、フォーム データを含む POST リクエストを送信します。Go 言語の http パッケージでは、http.PostForm 関数を使用して、フォーム データを含む POST リクエストを送信できます。 http.PostForm 関数のプロトタイプは次のとおりです。 funcPostForm(urlstring,dataurl.Values)(resp*http.Response,errerror)where, u

クイック アプリケーション: PHP の実践的な開発ケース分析 複数ファイルの非同期 HTTP ダウンロード インターネットの発展に伴い、ファイル ダウンロード機能は多くの Web サイトやアプリケーションの基本的なニーズの 1 つになりました。複数のファイルを同時にダウンロードする必要があるシナリオでは、従来の同期ダウンロード方法は非効率的で時間がかかることがよくあります。このため、PHP を使用して HTTP 経由で複数のファイルを非同期にダウンロードするソリューションがますます一般的になってきています。この記事では、実際の開発事例を通して、PHP 非同期 HTTP の使用方法を詳しく分析します。

C# におけるネットワーク通信とセキュリティの一般的な問題と解決策 今日のインターネット時代では、ネットワーク通信はソフトウェア開発に不可欠な部分となっています。 C# では通常、データ送信のセキュリティ、ネットワーク接続の安定性など、ネットワーク通信の問題が発生します。この記事では、C# における一般的なネットワーク通信とセキュリティの問題について詳しく説明し、対応する解決策とコード例を提供します。 1. ネットワーク通信の問題 ネットワーク接続の中断: ネットワーク通信プロセス中に、ネットワーク接続が中断される場合があります。

HTTP ステータス コード 200: 成功した応答の意味と目的を調べる HTTP ステータス コードは、サーバーの応答のステータスを示すために使用される数値コードです。このうち、ステータス コード 200 は、リクエストがサーバーによって正常に処理されたことを示します。この記事では、HTTP ステータス コード 200 の具体的な意味と使用法について説明します。まず、HTTP ステータス コードの分類を理解しましょう。ステータス コードは、1xx、2xx、3xx、4xx、5xx の 5 つのカテゴリに分類されます。このうち、2xx は成功応答を示します。 200 は 2xx で最も一般的なステータス コードです
