Workerman 開発: WebSocket サーバーの実装方法

WBOY
リリース: 2023-11-07 15:29:01
オリジナル
1389 人が閲覧しました

Workerman 開発: WebSocket サーバーの実装方法

Workerman を使用して WebSocket サーバーを実装する方法

WebRTC テクノロジ、ゲームのリアルタイム通信、オンライン チャット、その他のアプリケーションの人気が高まるにつれて、WebSocket テクノロジはますます重要です。 Workerman は、PHP 環境で実行される高性能の非同期 TCP、UDP、および Unix Socket ネットワーク フレームワークであり、本質的に高い同時実行性をサポートしており、WebSocket サーバーの開発に非常に適しています。

この記事では、WebSocket 接続の処理方法、WebSocket メッセージの送受信方法、フレームワークと他のライブラリとの統合方法など、Workerman を使用して WebSocket サーバーを実装する方法を詳しく紹介します。完全なサンプル コードも記事の最後に記載されています。

  1. Workerman のインストール

Workerman の使用を開始する前に、Workerman をインストールする必要があります。 Composer を介してインストールすることも、GitHub からソース コードを直接ダウンロードして手動でインストールすることもできます。ここでは Composer のインストールを例に挙げます。

composer require workerman/workerman
ログイン後にコピー
ログイン後にコピー
  1. WebSocket サーバー コードの作成

Workerman を使用して WebSocket サーバーを実装する前に、まず次の動作原理を理解する必要があります。 WebSocket プロトコル。 WebSocket は全二重の長時間接続プロトコルであり、クライアントとサーバーはハンドシェイクを通じて接続を確立し、相互にメッセージを送信できます。 WebSocket メッセージには、テキスト、バイナリ、さらにはファイルなどの任意のデータを使用でき、サーバーはメッセージの種類に応じて異なる方法でメッセージを処理できます。

Workerman を使用した WebSocket サーバーの実装は非常に簡単で、数行のコードのみで完了します。以下に例を示します。

require_once __DIR__ . '/vendor/autoload.php';
use WorkermanWorker;

// 创建一个Worker监听8090端口,使用websocket协议通讯
$wsWorker = new Worker("websocket://0.0.0.0:8090");

// 启动4个进程对外提供服务
$wsWorker->count = 4;

// 处理WebSocket连接的回调函数
$wsWorker->onConnect = function($connection) {
    echo "New connection
";
};

// 处理WebSocket消息的回调函数
$wsWorker->onMessage = function($connection, $data) {
    // 处理消息...
};

// 启动Worker
Worker::runAll();
ログイン後にコピー

まず、Worker インスタンスを作成し、ポート 8090 でリッスンし、WebSocket プロトコルを使用して通信するように指定します。次に、4 つのプロセスをセットアップして、多数の同時接続の処理を開始します。 Worker は TCP、UDP、Unix Socket などの複数の送信プロトコルをサポートしているため、WebSocket プロトコルを指定する必要があります。

この例では、2 つのコールバック関数のみを定義します。

  1. 新しい WebSocket 接続が確立されると、onConnect コールバック関数が呼び出され、それをここに記録できます。ログやオンライン ユーザー統計として。
  2. WebSocket メッセージを受信すると、onMessage コールバック関数が呼び出され、簡単な計算や返信の送信など、ここでメッセージを処理する必要があります。
  3. 最後のステップはワーカーを起動することです。ワーカーは指定されたポートのリッスンを開始し、WebSocket 接続とメッセージを処理します。
  4. WebSocket メッセージ処理

onMessage コールバック関数を通じて、クライアントから送信された WebSocket メッセージを受信できます。データ形式はテキストまたはバイナリです。 WebSocket メッセージの処理方法はアプリケーションのシナリオによって異なります。たとえば、オンライン チャット アプリケーションではブロードキャストやポイントツーポイント チャットなどの機能を実装する必要があり、ゲーム アプリケーションではマイクロ秒レベルのリアルタイム通信を実装する必要があります。

以下は、受信したメッセージを出力してクライアントに返信できる簡単な例です:

$wsWorker->onMessage = function($connection, $data) {
    echo "Received message: {$data}
";
    $connection->send("Received: {$data}");
};
ログイン後にコピー

WebSocket 接続のステータス

WebSocket 接続が確立された後, クライアントとサーバー間の接続は開いたままになります。 onClose コールバック関数を通じて、切断イベントを処理できます。

$wsWorker->onClose = function($connection) {
    echo "Connection closed
";
};
ログイン後にコピー
  1. 統合フレームワーク

Workerman は他のフレームワークと簡単に統合できます。ここでは、Laravel フレームワークを例として、Workerman を使用して Laravel に WebSocket サーバーを実装する方法を紹介します。

まず、Laravel プロジェクトに Workerman をインストールする必要があります:

composer require workerman/workerman
ログイン後にコピー
ログイン後にコピー

次に、WebSocket サーバーを起動するカスタム Artisan コマンドを作成できます:

php artisan make:command WebSocketServer
ログイン後にコピー

次に、 app /Console/Commands/WebSocketServer.php ファイルにコードを記述します:

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;
use WorkermanWorker;

class WebSocketServer extends Command {
    // 命令名称
    protected $name = 'websocket:server';

    // 命令描述
    protected $description = 'Start WebSocket server';

    // 执行命令
    public function handle() {
        // 创建Worker实例,监听8080端口
        $wsWorker = new Worker("websocket://0.0.0.0:8080");

        // 进程数量
        $wsWorker->count = 4;

        // 处理连接事件
        $wsWorker->onConnect = function($connection) {
            echo "New connection
";
        };

        // 处理消息事件
        $wsWorker->onMessage = function($connection, $data) {
            // 处理消息
        };

        // 运行Worker
        Worker::runAll();
    }
}
ログイン後にコピー

最後に、次のコマンドを使用して WebSocket サーバーを起動できます:

php artisan websocket:server
ログイン後にコピー

ご覧のとおり、これは非常に便利です。 Workerman を使用して WebSocket サーバーを実装するのは簡単で、他のフレームワークに簡単に統合できます。

  1. 完全なコード例

以下は、クライアントから送信されたメッセージを受信して​​簡単な処理を実行し、処理結果を返信する完全な WebSocket サーバーの例です。クライアント:

count = 4;

// 处理WebSocket连接的回调函数
$wsWorker->onConnect = function($connection) {
    echo "New connection
";
};

// 处理WebSocket消息的回调函数
$wsWorker->onMessage = function($connection, $data) {
    echo "Received message: {$data}
";
    $result = "Received: {$data}";
    $connection->send($result);
};

// 处理连接断开事件的回调函数
$wsWorker->onClose = function($connection) {
    echo "Connection closed
";
};

// 启动Worker
Worker::runAll();
ログイン後にコピー

上記は Workerman を使用して WebSocket サーバーを実装する方法についての説明です。この記事の紹介を通じて、読者は関連する技術知識を習得し、実際のプロジェクトでもこれらのテクニックを使用できるようになると思います。発展した。

以上がWorkerman 開発: WebSocket サーバーの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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