ホームページ > バックエンド開発 > PHPチュートリアル > PHPでWebSocketを使用する方法

PHPでWebSocketを使用する方法

WBOY
リリース: 2023-06-11 18:10:01
オリジナル
2562 人が閲覧しました

ネットワーク技術の発展に伴い、ブラウザとサーバーの間にリアルタイム通信チャネルを確立して接続を維持できる WebSocket (Web ソケット) が一般的なプロトコルになりました。このプロトコルは、Web アプリケーションでリアルタイム通信機能を実現する上で大きな役割を果たします。

PHP 開発の分野では、WebSocket がますます広く使用されています。この記事では、PHPでWebSocketを使う方法を紹介します。

  1. WebSocket ライブラリのインストール

まず、PHP で WebSocket 関数を簡単に実装するには、PHP WebSocket ライブラリを使用する必要があります。現在、最も人気のある PHP WebSocket ライブラリは、Ratchet と PHP WebSocket です。

ここでは、ReactPHP ライブラリを使用して非同期イベント駆動型 PHP を実装する Ratchet を使用します。これは、他のフレームワークと完全に互換性があり、柔軟性と拡張性を備えています。

Ratchet は Composer を使用してインストールおよび管理されるため、始める前に、まず Composer をインストールする必要があります。

Composer はここからダウンロードできます: https://getcomposer.org/

Composer を使用して Ratchet をインストールします:

composer require cboden/ratchet
ログイン後にコピー
  1. PHP WebSocket サーバーを作成します

この例では、単純なチャット ルームを実装し、Ratchet を使用して WebSocket サーバーを作成します。実装手順は次のとおりです:

a. WebSocket サーバーの作成

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

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

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

$server->run();
ログイン後にコピー

ここでは、最初に Ratchet ライブラリが導入され、次に WebSocket サーバーが作成されます。 HTTP および WebSocket プロトコルのサポートをそれぞれ指定し、それらを Chat クラスに渡します (Chat クラスがクライアント接続要求の処理に使用されることは後で説明します)。

ここではポート 8080 をリッスンします。

b. チャット ルームを作成する

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class Chat implements MessageComponentInterface
{
    public $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) {
            if ($client !== $from) {
                $client->send($msg);
            }
        }
    }

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

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        $conn->close();
    }
}
ログイン後にコピー

ここでは、MessageComponentInterface インターフェイスを実装する Chat という名前のクラスを作成しました。このインターフェイスは、さまざまな接続状態で WebSocket サーバーによって実行される操作を定義します。

具体的には、コンストラクターでクライアント変数を宣言しました。これは、接続されたクライアントを格納する SplObjectStorage オブジェクトです。 onOpen メソッドでは、接続オブジェクトがこの変数に割り当てられます。

クライアントからメッセージがある場合、onMessage メソッドを通じてメッセージをブロードキャストし、接続ごとに受信します。

onClose メソッドでは、接続オブジェクトが変数から削除されます。エラーが発生し、クライアント接続を処理できない場合は、onError 関数が呼び出されます。

  1. クライアント側の JavaScript コードを作成する

次に、WebSocket サーバーに接続するためのクライアント側の JavaScript コードが必要です。

let socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
  console.log('WebSocket连接已建立');
};

socket.onmessage = function(event) {
  console.log('收到消息:' + event.data);
};
ログイン後にコピー

ここでは、WebSocket オブジェクトの API を直接使用して、サーバーに接続し、メッセージを送受信します。

  1. WebSocket サーバーの実行

上記の手順を完了すると、WebSocket サーバーが正常に作成されました。次に、コマンド ラインからサーバーを実行します。

php server.php
ログイン後にコピー

コマンド ラインからサーバーを起動すると、次のような結果が表示されるはずです。

2019-03-22 11:46:55 WebSocketServer: Listening on 0.0.0.0:8080
2019-03-22 11:52:50 WebSocketServer: Opened connection to http://localhost:54616
ログイン後にコピー

は、WebSocket サービスが開始されたことを示します。成功し、ポート 8080 でリッスンします。

  1. WebSocket 接続のテスト

最後に、ブラウザを開いて http://localhost/chat.html にアクセスすると、ブラウザが WebSocket に接続して参加していることがわかります。サーバ。

let socket = new WebSocket('ws://localhost:8080');
socket.onopen = function(event) {
  console.log('WebSocket连接已建立');
  socket.send('欢迎加入聊天室');
};

socket.onmessage = function(event) {
  console.log('收到消息:' + event.data);
};
ログイン後にコピー

ここでは、メッセージをサーバーに送信し、サーバー メッセージの受信時にコンソールに記録します。

テスト Web ページを実行すると、コンソールに次のような出力が表示されます。

WebSocket已连接
WebSocket收到消息:欢迎加入聊天室
ログイン後にコピー

これで、PHP で WebSocket が正常に使用され、簡単なチャット ルームが作成されました。このチュートリアルがお役に立てば幸いです。

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート