検索

Understanding WebSockets in PHP

WebSocket は、単一の TCP 接続上でリアルタイムの全二重通信チャネルを提供します。クライアントがサーバーにリクエストを送信して応答を待つ HTTP とは異なり、WebSocket を使用すると、複数のリクエストを必要とせずにクライアントとサーバー間の継続的な通信が可能になります。これは、チャット アプリケーション、ライブ通知、オンライン ゲームなど、リアルタイムの更新が必要なアプリケーションに最適です。

このガイドでは、WebSocket、WebSocket の仕組み、PHP での実装方法について説明します。


WebSocket とは何ですか?

WebSocket により、Web ブラウザ (またはその他のクライアント) とサーバー間の対話型通信が可能になります。 WebSocket の重要な側面は次のとおりです:

  1. 全二重通信: クライアントとサーバーの両方がいつでも相互にメッセージを送信できるため、従来の HTTP ポーリングよりも接続が効率的になります。
  2. 永続的な接続: WebSocket 接続は、一度確立されると、クライアントまたはサーバーによって明示的に閉じられるまで開いたままになります。
  3. 低遅延: WebSocket ではリクエストごとに新しい接続を開く必要がなくなるため、遅延が減少し、リアルタイム通信に最適です。

WebSocket の仕組み

  1. ハンドシェイク: 通信は HTTP リクエストから始まります。クライアントは、接続を HTTP から WebSocket に切り替えるために、Upgrade ヘッダーを含む HTTP リクエストを送信します。
  2. 接続の確立: サーバーがハンドシェイクを確認すると、接続が確立され、クライアントとサーバーの両方がメッセージの送受信を開始できるようになります。
  3. メッセージング: データはフレームを通じて送信されます。フレームは軽量で、HTTP ヘッダーのオーバーヘッドなしで送受信できます。
  4. 接続の終了: クライアントまたはサーバーのいずれかが接続を終了できます。

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 サーバーを作成しましょう。

  1. 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 サーバーに接続するフロントエンドを作成する

次に、jQueryJavaScript を使用して HTML ファイルを作成し、WebSocket サーバーに接続しましょう。

  1. HTML ファイルを作成しますindex.html:


    <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>


    <h2 id="WebSocket-Chat">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 + '');
            };

            // Sending a message to the server
            $('#send').click(function() {
                var msg = $('#message').val();
                ws.send(msg);
                $('#message').val('');
            });
        });
    </script>


このシンプルなインターフェイスを使用すると、メッセージを入力して WebSocket サーバーに送信できます。接続されているすべてのクライアントがメッセージを受信して​​表示します。

ステップ 5: WebSocket 接続をテストする

  1. php start_server.php を実行して WebSocket サーバーを起動します。
  2. ブラウザでindex.htmlを開きます。
  3. 別のブラウザまたはタブで同じページを開いて、複数のクライアントをシミュレートします。

1 つのクライアントからメッセージを送信すると、接続されているすべてのクライアントのブラウザにメッセージが表示されます。


PHP에서 WebSocket을 사용할 때의 장점

  • 실시간 업데이트: WebSocket은 HTTP 폴링의 오버헤드 없이 실시간 업데이트를 제공합니다.
  • 낮은 지연 시간: 연결이 계속 열려 있으므로 메시지를 즉시 보낼 수 있어 지연 시간이 줄어듭니다.
  • 양방향 통신: 통신이 클라이언트에서 시작되는 기존 HTTP와 달리 서버와 클라이언트 모두 서로에게 동시에 메시지를 보낼 수 있습니다.

PHP의 WebSocket 사용 사례

  • 채팅 애플리케이션: WebSocket은 메시지를 모든 사용자에게 즉시 전송해야 하는 실시간 채팅 애플리케이션에 적합합니다.
  • 실시간 알림: 실시간 알림(예: 소셜 미디어, 주가)을 푸시해야 하는 앱에 적합합니다.
  • 실시간 공동 작업 도구: WebSocket을 사용하면 실시간 문서 편집과 같은 실시간 공동 작업이 가능합니다.
  • 온라인 게임: 멀티플레이어 온라인 게임은 WebSocket의 지연 시간이 짧은 통신의 이점을 누릴 수 있습니다.

결론

WebSocket은 클라이언트와 서버 간의 실시간 전이중 통신을 위한 강력한 솔루션을 제공하며 채팅 시스템, 실시간 알림 및 기타 실시간 애플리케이션에 이상적입니다. Ratchet과 같은 라이브러리와 함께 PHP를 사용하면 WebSocket 서버를 쉽게 설정하고 이를 애플리케이션에 통합하여 더 나은 사용자 참여와 응답성을 얻을 수 있습니다.

以上がPHP の WebSocket を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版

SublimeText3 Mac版

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