ホームページ >バックエンド開発 >PHPチュートリアル >PHP API インターフェース: WebSocket の使用方法

PHP API インターフェース: WebSocket の使用方法

WBOY
WBOYオリジナル
2023-08-25 12:30:321854ブラウズ

PHP API接口:如何使用WebSockets

PHP は、動的な Web サイトや Web アプリケーションを構築するために一般的に使用されるオープンソースのサーバー側スクリプト言語です。 PHP API インターフェイスは通常、HTTP プロトコルを通じて提供されますが、最新の Web アプリケーションの需要が高まるにつれて、データのリアルタイム更新がより重要になってきています。これには、変更に迅速に対応するために、双方向通信に WebSocket を使用する必要があります。

WebSocket は、HTML5 のクライアントとサーバー間の新しいタイプの通信チャネルです。長時間接続を維持することで、リアルタイムの双方向データ伝送を実現します。 HTTP リクエストとは異なり、WebSocket はリクエストごとに TCP ソケットを作成するのではなく、WebSocket 接続上で TCP ソケットを開きます。これは、WebSocket により、HTTP リクエストよりも高速かつ簡単にリアルタイムのデータ転送が可能になることを意味します。

この記事では、PHP API インターフェイスを使用して WebSocket と通信し、Web アプリケーションのデータをリアルタイムで更新する方法を紹介します。

1. Ratchet のインストール
WebSocket を使用するには、PHP で非常に人気のある WebSocket ライブラリである Ratchet をインストールする必要があります。 Ratchet を Github からダウンロードしてプロジェクトに追加することも、Composer を使用してインストールすることもできます。

Composer を使用している場合は、次のコマンドを実行できます:

composer require cboden/ratchet

これにより、Ratchet が自動的にインストールされます。インストールすると、WebSocket Server クラスを使用して WebSocket サーバーを作成できるようになります。

2. WebSocket サーバーの作成
Ratchet を使用すると、クライアントとのリアルタイム通信用の WebSocket サーバーを作成できます。以下は、基本的な WebSocket サーバーのサンプル コードです。

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetWebSocketWsServer;

require_once(__DIR__ . '/vendor/autoload.php');

class MyWebSocket implements MessageComponentInterface
{
    public function onOpen(ConnectionInterface $conn)
    {
        // 当有新客户端连接时执行
        echo "New connection! ({$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 接收消息
        echo "Received message: {$msg}
";
    
        // 回复消息
        $from->send('Data received: ' . $msg);
    }

    public function onClose(ConnectionInterface $conn)
    {
        // 当客户端断开连接时执行
        echo "Connection {$conn->resourceId} has disconnected
";
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        // 当出现错误时执行
        echo "An error has occurred: {$e->getMessage()}
";
    
        $conn->close();
    }
}

// 创建WebSocket服务器
$server = IoServer::factory(
    new WsServer(
        new MyWebSocket()
    ),
    8080
);

// 启动WebSocket服务器
$server->run();

上記のコードは、ポート 8080 からのクライアント接続を受け入れることができる WebSocket サーバーを作成します。実際のビジネス ロジックはなく、接続、メッセージ、切断イベントを出力するだけです。これを出発点として使用し、必要に応じて独自の WebSocket サーバー クラスをカスタマイズできます。

3. クライアントは WebSocket API を使用します
クライアント側では、WebSocket API を使用してサーバーとの接続を確立し、メッセージを送受信できます。以下は最も単純なクライアント WebSocket の例です:

var connection = new WebSocket('ws://localhost:8080');

connection.onopen = function () {
    console.log('WebSocket connected');
  
    // 发送消息
    connection.send('Hello, WebSocket server!');
};

connection.onmessage = function (event) {
    console.log('Received message: ' + event.data);
};

connection.onclose = function (event) {
    console.log('WebSocket connection closed with code ' + event.code + ' and reason: ' + event.reason);
};

connection.onerror = function (error) {
    console.log('WebSocket error: ' + error.message);
};

このコードは、先ほど作成した WebSocket サーバーへの接続を試行します。接続イベントを受信すると、メッセージを送信します。サーバーからメッセージを受信すると、そのメッセージをコンソールに記録します。接続の終了やエラーの状況も処理します。

4. PHP API インターフェイスを介した WebSocket の使用
次に、PHP API インターフェイスを使用して WebSocket と通信する方法を考えてみましょう。従来の API ルーターを使用して WebSocket リクエストを処理できます。クライアントが WebSocket サーバーに接続するとき、Ratchet WebSocket の ConnectionInterface インターフェースを使用して関連情報を取得できます。この情報を使用して接続を認証し、認証されたユーザーのみが WebSocket サーバーに接続できるようにすることもできます。

以下はサンプル コードです:

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetWebSocketWsServer;

require_once(__DIR__ . '/vendor/autoload.php');

// 自定义WebSocket服务器类
class MyWebSocket implements MessageComponentInterface
{
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn)
    {
        // 将新连接存储到$clients
        $this->clients->attach($conn);
    
        // 获取客户端地址
        $client_ip = $conn->remoteAddress;
    
        // 处理新连接(验证身份、发送欢迎消息等)
        // ...
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 处理收到的消息
        // ...
    }

    public function onClose(ConnectionInterface $conn)
    {
        // 从$clients中删除关闭连接
        $this->clients->detach($conn);

        // 处理关闭连接
        // ...
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        // 处理WebSocket错误
        // ...
        
        // 关闭连接
        $conn->close();
    }
}

// 创建WebSocket服务器
$server = IoServer::factory(
    new WsServer(
        new MyWebSocket()
    ),
    8080
);

// 启动WebSocket服务器
$server->run();

onOpen メソッドでは、接続の確認、クライアントへのウェルカム メッセージの送信、新しい接続の記録などの処理を実行できます。 onClose メソッドでは、リストから接続を削除したり、他のクライアントにオフライン通知を送信したりするなど、接続を閉じるイベントを処理できます。

onMessage メソッドでは、WebSocket クライアントによって送信されたメッセージを処理できます。 WebSocket は双方向通信チャネルであるため、サーバーがクライアントにメッセージを送信するだけでなく、クライアントもサーバーにメッセージを送信できることを意味し、アプリケーションのデータ送受信機能が大幅に強化されます。

PHP API インターフェイスを介して WebSocket と通信すると、リアルタイムでデータを更新できます。これは、リアルタイム トランザクション、メッセージ プッシュ、ゲーム アプリケーションなどのリアルタイム アプリケーションにとって非常に重要です。

以上がPHP API インターフェース: WebSocket の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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