ホームページ  >  記事  >  バックエンド開発  >  PHP の WebSocket

PHP の WebSocket

PHPz
PHPzオリジナル
2023-05-29 08:10:351844ブラウズ

WebSocket は、TCP プロトコルに基づく全二重通信プロトコルであり、双方向通信を実装し、クライアントとサーバー間のリアルタイムのデータ対話を実現します。 Web アプリケーションでは、WebSocket テクノロジを通じて、ユーザーは従来の HTTP プロトコルよりも高速でリアルタイムなエクスペリエンスを得ることができます。 PHP言語では、WebSocketの実装も非常に便利です。

PHP で WebSocket を実装するには、主に 2 つの方法があります。1 つは swoole 拡張機能を使用する方法、もう 1 つは Ratchet ライブラリを使用する方法です。

Swoole 拡張機能は、非同期、コルーチン、マルチプロセスなどの機能を実装できるオープンソースのネットワーク通信フレームワークです。 swoole 拡張機能を使用して WebSocket を実装すると、ネットワーク通信の効率と安定性が大幅に向上します。以下は、Swoole 拡張機能を使用して WebSocket を実装するサンプル コードです。

<?php

$server = new SwooleWebsocketServer("127.0.0.1", 9502);

$server->on('open', function (SwooleWebSocketServer $server, $request) {
    echo "client {$request->fd} connected
";
});

$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    echo "received message: {$frame->data}
";
    $server->push($frame->fd, "this is server");
});

$server->on('close', function (SwooleWebSocketServer $server, $fd) {
    echo "client {$fd} closed
";
});

$server->start();

上記のコードでは、最初に SwooleWebsocketServer クラスを通じて WebSocket サーバー オブジェクトが作成され、次に接続の確立が open, メッセージで実装されます。メッセージの読み取りと書き込み、接続のクローズなどの操作。 swoole 拡張機能によって提供される WebSocket サーバーは非同期かつノンブロッキングであるため、同時実行性の高いネットワーク通信アプリケーションをサポートできることに注意してください。

WebSocket を実装するもう 1 つの方法は、Ratchet ライブラリを使用することです。 Ratchet は PHP で実装された WebSocket サーバー実装ライブラリであり、クライアントとサーバー間の対話を簡単に実現するためのさまざまなイベント コールバック関数が組み込まれています。以下は、Ratchet ライブラリを使用して WebSocket を実装するサンプル コードです。

<?php

require dirname(__DIR__) . '/vendor/autoload.php';

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

class EchoServer 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();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new EchoServer()
        )
    ),
    8080
);

$server->run();

上記のコードでは、最初に Ratchet ライブラリが導入され、次に MessageComponentInterface インターフェイスを実装する EchoServer クラスが定義されます。 onOpen、onMessage、onClose、onError 関数は、それぞれ接続の確立、メッセージの読み書き、接続の終了、エラー処理などのイベントを処理します。最後に、WebSocket サーバー オブジェクトが作成され、IoServer::factory 関数によって実行されます。

要約すると、swoole 拡張機能を使用する場合でも、Ratchet ライブラリを使用する場合でも、PHP で WebSocket を実装すると非常に便利です。開発者は、実際のニーズに基づいて適切なソリューションを選択し、Web アプリケーションにリアルタイム通信機能を迅速かつ効率的に実装できます。

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

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