ホームページ >バックエンド開発 >PHPチュートリアル >PHP と WebSocket: リアルタイム データ転送のベスト プラクティス

PHP と WebSocket: リアルタイム データ転送のベスト プラクティス

WBOY
WBOYオリジナル
2023-12-17 21:21:33713ブラウズ

PHP和WebSocket: 实现实时数据传输的最佳实践

近年、インターネットの急速な発展に伴い、リアルタイム通信の需要がますます高まっており、WebSocket の出現により、より洗練されたリアルタイム通信のソリューションが提供されます。時刻データ送信。 Web 開発では、PHP 言語も主流のバックエンド言語の 1 つとして位置を占めています。では、PHP と WebSocket を使用してリアルタイムのデータ送信を実現するにはどうすればよいでしょうか?

1. WebSocket とは

WebSocket は、HTTP/HTTPS プロトコルのポート 80 または 443 を介して通信する全二重通信プロトコルです。 WebSocket が接続を確立すると、クライアントとサーバーの両方が「リクエスト/レスポンス」モードを必要とせずに相互にメッセージを送信できるため、強力なリアルタイム パフォーマンス、双方向通信、低コストという利点があります。オーバーヘッドが少なく、リアルタイム チャット、オンライン ゲーム、および高速な対話が必要なその他のシナリオに適しています。

2. PHP での WebSocket の使用

Web 開発で一般的に使用される PHP フレームワークには、Laravel、CodeIgniter などが含まれます。ここではLaravelを例に、PHPとWebSocketを使ってリアルタイムのデータ送信を実現する方法を紹介します。

  1. Ratchet のインストール

Ratchet は、WebSocket サーバーの実装に使用できる PHP 用の WebSocket ライブラリです。 Laravel プロジェクトでは、composer を通じてインストールできます。コマンドは次のとおりです:

$ composer require cboden/ratchet
  1. WebSocket コントローラーの作成

app/Http/Controllers ディレクトリに WebSocket を作成します。 Laravel プロジェクト コントローラーの ChatController という名前。このコントローラは、Ratchet の MessageComponentInterface インターフェイスを継承し、以下に示すように、その onOpen、onMessage、onClose、および onError メソッドをオーバーライドします。

<?php

namespace AppHttpControllers;

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class ChatController implements MessageComponentInterface
{
    protected $clients;

    public function __construct()
    {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        foreach ($this->clients as $client) {
            if ($from != $client) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected
";
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        echo "An error has occurred: {$e->getMessage()}
";
        $conn->close();
    }
}

このコントローラでは、$clients はクライアント接続オブジェクトのコレクションであり、onOpen メソッドはコールバックを表します新しいクライアントが接続するときのコールバック メソッド、onMessage メソッドはクライアント メッセージを受信したときのコールバック メソッド、onClose メソッドはクライアントが切断されたときのコールバック メソッド、onError メソッドは接続エラーが発生したときのコールバック メソッドを表します。

  1. WebSocket サービスの作成

Laravel プロジェクトの Routes/web.php ルーティング ファイルに次のコードを追加します。

use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;
use AppHttpControllersChatController;

Route::get('/chat', function () {
    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new ChatController()
            )
        ),
        8080
    );
    $server->run();
});

このコードは、次のことを示しています。 WebSocket サービスはローカル ポート 8080 をリッスンし、サービスに対応するコントローラーは ChatController です。

  1. クライアント コード

フロントエンド ページでは、次に示すように、JavaScript コードを通じて WebSocket サービスへの接続を確立できます。 # コードは WebSocket とサーバー間の接続が確立されたことを示します。サーバーのメッセージを受信すると、コンソールに出力されます。メッセージを送信する場合は、send メソッドが呼び出されます。

テスト
  1. Laravel プロジェクトを開始した後、ブラウザで http://localhost/chat にアクセスし、WebSocket を介してサーバーとの接続を確立し、リアルタイムを実現します。データ送信。

上記は、PHP と WebSocket を使用してリアルタイム データ送信を実現するコード例ですが、実際のニーズに応じてさらに詳細に開発し、リアルタイム性とアプリケーションのパフォーマンスを向上させることができます。

以上がPHP と WebSocket: リアルタイム データ転送のベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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