PHP の WebSocket を理解する
WebSocket は、単一の TCP 接続上でリアルタイムの全二重通信チャネルを提供します。クライアントがサーバーにリクエストを送信して応答を待つ HTTP とは異なり、WebSocket を使用すると、複数のリクエストを必要とせずにクライアントとサーバー間の継続的な通信が可能になります。これは、チャット アプリケーション、ライブ通知、オンライン ゲームなど、リアルタイムの更新が必要なアプリケーションに最適です。
このガイドでは、WebSocket、WebSocket の仕組み、PHP での実装方法について説明します。
WebSocket とは何ですか?
WebSocket により、Web ブラウザ (またはその他のクライアント) とサーバー間の対話型通信が可能になります。 WebSocket の重要な側面は次のとおりです:
- 全二重通信: クライアントとサーバーの両方がいつでも相互にメッセージを送信できるため、従来の HTTP ポーリングよりも接続が効率的になります。
- 永続的な接続: WebSocket 接続は、一度確立されると、クライアントまたはサーバーによって明示的に閉じられるまで開いたままになります。
- 低遅延: WebSocket ではリクエストごとに新しい接続を開く必要がなくなるため、遅延が減少し、リアルタイム通信に最適です。
WebSocket の仕組み
- ハンドシェイク: 通信は HTTP リクエストから始まります。クライアントは、接続を HTTP から WebSocket に切り替えるために、Upgrade ヘッダーを含む HTTP リクエストを送信します。
- 接続の確立: サーバーがハンドシェイクを確認すると、接続が確立され、クライアントとサーバーの両方がメッセージの送受信を開始できるようになります。
- メッセージング: データはフレームを通じて送信されます。フレームは軽量で、HTTP ヘッダーのオーバーヘッドなしで送受信できます。
- 接続の終了: クライアントまたはサーバーのいずれかが接続を終了できます。
WebSocket を使用する場合
- リアルタイム アプリケーション: チャット アプリケーション、ライブ通知、共同編集など。
- ゲーム: 頻繁なアップデートが必要なマルチプレイヤー オンライン ゲーム用。
- ライブ フィード: 株価、スポーツのスコア、または IoT デバイスからのリアルタイム データをストリーミングします。
- コラボレーション ツール: 複数のユーザーがリアルタイムで更新を確認する必要がある Google ドキュメントなどのアプリ用。
PHP での WebSocket の実装
PHP で WebSocket を実装するには、WebSocket を使用したリアルタイムの双方向通信用に特別に設計された PHP ライブラリである Ratchet などのライブラリを使用できます。
Ratchet を使用した段階的な WebSocket 実装
ステップ 1: Composer 経由で Ratchet をインストールする
まず、Ratchet ライブラリをインストールする必要があります。 Composer がインストールされていると仮定すると、次のコマンドを実行できます:
composer require cboden/ratchet
ステップ 2: PHP で WebSocket サーバーを作成する
接続とメッセージを処理する単純な WebSocket サーバーを作成しましょう。
- WebSocketServer.php で WebSocket サーバー クラスを作成します:
<?php use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; class WebSocketServer implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new \SplObjectStorage; } // Called when a new client connects public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection: ({$conn->resourceId})\n"; } // Called when a client sends a message public function onMessage(ConnectionInterface $from, $msg) { echo "New message: $msg\n"; foreach ($this->clients as $client) { if ($from !== $client) { // Send the message to everyone except the sender $client->send($msg); } } } // Called when a connection is closed public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection closed: ({$conn->resourceId})\n"; } // Called if an error occurs public function onError(ConnectionInterface $conn, \Exception $e) { echo "Error: {$e->getMessage()}\n"; $conn->close(); } }
このクラスは、新しい接続、受信メッセージ、閉じられた接続、エラーを処理するメソッドを定義する Ratchet の MessageComponentInterface を実装します。
ステップ 3: WebSocket サーバーの実行
WebSocket サーバーを起動するための新しい PHP スクリプトを作成します (例: start_server.php)。
<?php require __DIR__ . '/vendor/autoload.php'; use Ratchet\Http\HttpServer; use Ratchet\Server\IoServer; use Ratchet\WebSocket\WsServer; $server = IoServer::factory( new HttpServer( new WsServer( new WebSocketServer() ) ), 8080 // Port number for the WebSocket server ); $server->run();
次のスクリプトを実行してサーバーを起動できます:
php start_server.php
サーバーは ws://localhost:8080 で実行されるようになります。
ステップ 4: WebSocket サーバーに接続するフロントエンドを作成する
次に、jQuery と JavaScript を使用して HTML ファイルを作成し、WebSocket サーバーに接続しましょう。
- HTML ファイルを作成しますindex.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>WebSocket Chat</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <h2>WebSocket Chat</h2> <input type="text" id="message" placeholder="Enter your message"> <button id="send">Send</button> <div id="chat"></div> <script> $(document).ready(function() { var ws = new WebSocket('ws://localhost:8080'); // When receiving a message from the server ws.onmessage = function(event) { $('#chat').append('<p>' + event.data + '</p>'); }; // Sending a message to the server $('#send').click(function() { var msg = $('#message').val(); ws.send(msg); $('#message').val(''); }); }); </script> </body> </html>
このシンプルなインターフェイスを使用すると、メッセージを入力して WebSocket サーバーに送信できます。接続されているすべてのクライアントがメッセージを受信して表示します。
ステップ 5: WebSocket 接続をテストする
- php start_server.php を実行して WebSocket サーバーを起動します。
- ブラウザでindex.htmlを開きます。
- 別のブラウザまたはタブで同じページを開いて、複数のクライアントをシミュレートします。
1 つのクライアントからメッセージを送信すると、接続されているすべてのクライアントのブラウザにメッセージが表示されます。
PHP에서 WebSocket을 사용할 때의 장점
- 실시간 업데이트: WebSocket은 HTTP 폴링의 오버헤드 없이 실시간 업데이트를 제공합니다.
- 낮은 지연 시간: 연결이 계속 열려 있으므로 메시지를 즉시 보낼 수 있어 지연 시간이 줄어듭니다.
- 양방향 통신: 통신이 클라이언트에서 시작되는 기존 HTTP와 달리 서버와 클라이언트 모두 서로에게 동시에 메시지를 보낼 수 있습니다.
PHP의 WebSocket 사용 사례
- 채팅 애플리케이션: WebSocket은 메시지를 모든 사용자에게 즉시 전송해야 하는 실시간 채팅 애플리케이션에 적합합니다.
- 실시간 알림: 실시간 알림(예: 소셜 미디어, 주가)을 푸시해야 하는 앱에 적합합니다.
- 실시간 공동 작업 도구: WebSocket을 사용하면 실시간 문서 편집과 같은 실시간 공동 작업이 가능합니다.
- 온라인 게임: 멀티플레이어 온라인 게임은 WebSocket의 지연 시간이 짧은 통신의 이점을 누릴 수 있습니다.
결론
WebSocket은 클라이언트와 서버 간의 실시간 전이중 통신을 위한 강력한 솔루션을 제공하며 채팅 시스템, 실시간 알림 및 기타 실시간 애플리케이션에 이상적입니다. Ratchet과 같은 라이브러리와 함께 PHP를 사용하면 WebSocket 서버를 쉽게 설정하고 이를 애플리케이션에 통합하여 더 나은 사용자 참여와 응답성을 얻을 수 있습니다.
以上がPHP の WebSocket を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホット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)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

Restapiの設計原則には、リソース定義、URI設計、HTTPメソッドの使用、ステータスコードの使用、バージョンコントロール、およびHATEOASが含まれます。 1。リソースは名詞で表され、階層で維持される必要があります。 2。HTTPメソッドは、GETを使用してリソースを取得するなど、セマンティクスに準拠する必要があります。 3.ステータスコードは、404など、リソースが存在しないことを意味します。 4。バージョン制御は、URIまたはヘッダーを介して実装できます。 5。それに応じてリンクを介してhateoasブーツクライアント操作をブーツします。

PHPでは、Try、Catch、最後にキーワードをスローすることにより、例外処理が達成されます。 1)TRYブロックは、例外をスローする可能性のあるコードを囲みます。 2)キャッチブロックは例外を処理します。 3)最後にブロックは、コードが常に実行されることを保証します。 4)スローは、例外を手動でスローするために使用されます。これらのメカニズムは、コードの堅牢性と保守性を向上させるのに役立ちます。

PHPの匿名クラスの主な機能は、1回限りのオブジェクトを作成することです。 1.匿名クラスでは、名前のないクラスをコードで直接定義することができます。これは、一時的な要件に適しています。 2。クラスを継承したり、インターフェイスを実装して柔軟性を高めることができます。 3.使用時にパフォーマンスとコードの読みやすさに注意し、同じ匿名のクラスを繰り返し定義しないようにします。
