ホームページ  >  記事  >  バックエンド開発  >  PHP経由でWebSocketプロトコルでリアルタイム通信する方法

PHP経由でWebSocketプロトコルでリアルタイム通信する方法

王林
王林オリジナル
2023-07-29 22:04:541932ブラウズ

PHP および WebSocket プロトコルを介してリアルタイムで通信する方法

Web アプリケーションの開発に伴い、オンライン チャット、株価などの多くのシナリオでリアルタイム通信が非常に重要になってきました。 WebSocket プロトコルは、Web ブラウザとサーバーの間にリアルタイム通信接続を確立するように設計されています。この記事では、リアルタイム通信に PHP および WebSocket プロトコルを使用する方法を紹介し、関連するコード例を示します。

1. WebSocket プロトコルの概要
WebSocket プロトコルは、TCP プロトコルに基づく全二重通信プロトコルであり、サーバーがクライアントにメッセージをアクティブにプッシュしたり、クライアントからメッセージを受信したりできるようにします。従来の HTTP プロトコルと比較して、WebSocket プロトコルには次の特徴があります。

  1. リアルタイム双方向通信: WebSocket は、サーバーとクライアントの間でリアルタイムの双方向通信を実現できます。クライアントは常にサーバーをポーリングします。
  2. 通信オーバーヘッドの低減: HTTP プロトコルと比較して、WebSocket プロトコルの通信ヘッダーは小さいため、通信オーバーヘッドが低減されます。
  3. パフォーマンスの向上: WebSocket プロトコルは長い接続を確立できるため、各リクエストのハンドシェイク オーバーヘッドが削減され、通信パフォーマンスが向上します。

2. PHP WebSocket 拡張機能
PHP 公式には WebSocket の直接サポートは提供されていませんが、拡張機能をインストールして使用することで WebSocket 機能を実装できます。現在、より一般的に使用されている PHP WebSocket 拡張機能には次のものがあります。

  1. Ratchet: WebSocket サーバーとクライアントのサポートを提供する軽量の PHP WebSocket ライブラリで、使いやすく、包括的な機能を備えています。
  2. Swoole: WebSocket サーバーとクライアントを実装できる高性能 PHP ネットワーク通信ライブラリ。
  3. Workerman: WebSocket サーバーとクライアントをサポートするマルチスレッド PHP ソケット フレームワーク。

スペースの制限のため、この記事ではデモンストレーションの例として Ratchet 拡張機能を使用します。

3. Ratchet 拡張機能をインストールします。
Ratchet 拡張機能は Composer を通じてインストールできます。次のコマンドを実行してインストールします。

composer require cboden/ratchet

4. WebSocket サーバーを作成します
以下は、単純な WebSocket サーバー側実装では、受信したメッセージをそのままクライアントに返すことができます:

<?php
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

require 'vendor/autoload.php';

class MyWebSocketServer implements MessageComponentInterface {
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
    }

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

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
    }

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

$server = App::make('RatchetServerIoServer', [
    new AppMyWebSocketServer()
]);

$server->run();

5. WebSocket クライアントの作成
以下は、上記のサーバー側と通信できる単純な WebSocket クライアント実装です。サーバー:

<?php
use RatchetClientWebSocket;
use RatchetClientConnector;
use ReactEventLoopFactory as EventLoopFactory;

require 'vendor/autoload.php';

$loop = EventLoopFactory::create();
$connector = new Connector($loop);

$connector('ws://localhost:8000')->then(function (WebSocket $conn) {
    $conn->on('message', function ($msg) use ($conn) {
        echo "Received: {$msg}
";
        $conn->close();
    });

    $conn->send('Hello, WebSocket Server!');
}, function (Exception $e) use ($loop) {
    echo "Could not connect: {$e->getMessage()}
";
    $loop->stop();
});

$loop->run();

6. WebSocket サービスの実行
コマンド ラインから WebSocket サーバーを起動します:

php server.php

次に、クライアント コードを実行します:

php client.php

クライアントとサービスのエンドツーエンドのリアルタイム通信。

概要:
この記事では、リアルタイム通信に PHP および WebSocket プロトコルを使用する方法を簡単に紹介し、Ratchet 拡張機能の関連コード例を示します。 WebSocket プロトコルを通じて、サーバーを実装してメッセージをクライアントにアクティブにプッシュし、リアルタイムの双方向通信を実現できます。 PHP WebSocket 拡張機能を使用すると、WebSocket サーバーとクライアントを簡単に作成し、単純なコードでリアルタイム通信を実現できます。

以上がPHP経由でWebSocketプロトコルでリアルタイム通信する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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