phpを使用してWebsocketを開発し、リアルタイムプッシュ機能を実装します

王林
リリース: 2023-12-02 12:46:02
オリジナル
881 人が閲覧しました

phpを使用してWebsocketを開発し、リアルタイムプッシュ機能を実装します

タイトル: PHP を使用してリアルタイム プッシュ機能を実現する Websocket を開発する

Websocket は、TCP プロトコルをベースにした通信プロトコルです。Web 開発では、Websocket を使用できます。リアルタイムプッシュを実現 リアルタイム通信やリアルタイムデータ更新のニーズを実現するプッシュ機能。この記事では、PHP 言語を使用して Websocket サーバーを開発し、具体的なコード例を示します。

1. 概要

Websocket は全二重通信プロトコルであり、従来の HTTP プロトコルと比較して、リアルタイム通信シナリオにより適しています。 Websocket プロトコルの機能は次のとおりです。

  1. 全二重通信をサポートし、データの送受信を同時に行うことができます。
  2. HTTP プロトコルと互換性があり、接続の確立に HTTP のようなハンドシェイク プロトコルを使用し、HTTP/HTTPS ポート経由で通信できます。
  3. データは、要求と応答のサイクルを待たずにいつでも送信できます。
  4. クロスドメイン通信をサポートし、異なるドメイン名で通信できます。

2. 開発環境の準備

開発を開始する前に、いくつかのツールと環境を準備する必要があります:

  1. PHP のインストール: PHPインタープリタがインストールされています。
  2. Composer のインストール: Composer は PHP の依存関係管理ツールで、Websocket 関連のライブラリをインストールするために使用します。
  3. エディターの選択: VS Code、Sublime Text など、開発に使用する任意のエディターを選択できます。

3. Websocket ライブラリをインストールする

PHP には、成熟した Websocket ライブラリが多数あり、その中でより一般的に使用されるものは Ratchet、Swoole などです。今回はRatchetを使って開発していきます。

  1. プロジェクトのルート ディレクトリに composer.json ファイルを作成し、次の内容を追加します:
{
    "require": {
        "cboden/ratchet": "^0.4"
    }
}
ログイン後にコピー
  1. ターミナルを開いて切り替えますプロジェクトのルート ディレクトリで、次のコマンドを実行して Ratchet ライブラリをインストールします。
composer install
ログイン後にコピー

4. Websocket サーバー コードを記述します

Websocket サーバーを作成する前に、まず説明します。 Websocketのワークフロー。

  1. 接続の確立: クライアントはサーバーとの Websocket 接続を確立します。クライアントは HTTP リクエストを送信し、サーバーはプロトコル切り替え応答を返して接続を確立します。
  2. メッセージ送信: 双方とも send メソッドを通じてメッセージを送信し、onMessage イベントを通じてメッセージを受信できます。
  3. 接続の終了: クライアントまたはサーバーが終了フレームを送信して接続を終了します。

以下は、Ratchet ライブラリを使用して Websocket サーバーを作成するためのサンプル コードです。

<?php

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

require 'vendor/autoload.php';

class MyWebSocket 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 ($client !== $from) {
                $client->send($msg);
            }
        }
    }

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

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

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

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

上記のコードは、 を実装する MyWebSocket クラスを定義します。 MessageComponentInterfaceインターフェイス内のメソッドは、接続、メッセージ、シャットダウン、およびエラー イベントを処理するために使用されます。 onOpen イベントでは、新しく確立された接続を $clients コレクションに追加し、onMessage イベントでは、すべての接続を横断してメッセージを他の接続に送信します。 onClose イベントでは、閉じた接続を $clients コレクションから削除します。onError イベントでは、例外を処理して接続を閉じます。

5. Websocket サーバーを実行します

ターミナルでプロジェクトのルート ディレクトリに切り替え、次のコマンドを実行して Websocket サーバーを起動します:

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

すべてが正常な場合は、次のような出力が表示されます。

New connection: 1
New connection: 2
Message received: Hello from client 1
Message received: Hello from client 2
Connection closed: 1
ログイン後にコピー

6. クライアント コードを作成します

最後に、テスト用のクライアントを作成する必要があります。

<!DOCTYPE html>
<html>
<head>
    <title>Websocket Client</title>
    <script>
        var socket = new WebSocket("ws://localhost:8080");

        socket.onopen = function() {
            console.log("Connected");
        };

        socket.onmessage = function(event) {
            console.log("Message received: " + event.data);
        };

        socket.onclose = function(event) {
            console.log("Connection closed");
        };

        function sendMessage() {
            var message = document.getElementById("message").value;
            socket.send(message);
        }
    </script>
</head>
<body>
    <input type="text" id="message">
    <button onclick="sendMessage()">Send</button>
</body>
</html>
ログイン後にコピー

この例では、JavaScript を使用して Websocket 接続を作成し、接続が確立され、メッセージが受信され、接続が閉じられたときに対応するログを出力します。このページには、メッセージを送信するための入力ボックスと送信ボタンが用意されています。

7. 概要

この記事では、PHP を使用して Websocket サーバーを開発する方法を紹介し、読者が Websocket の動作原理と使用法を理解できるように具体的なコード例を示します。 Websocket にはリアルタイム通信機能があり、リアルタイム プッシュ、チャット ルーム、マルチプレイヤー ゲームなどのシナリオの実装に使用できます。

以上がphpを使用してWebsocketを開発し、リアルタイムプッシュ機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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