Workerman を使用して WebSocket サーバーを実装する方法
WebRTC テクノロジ、ゲームのリアルタイム通信、オンライン チャット、その他のアプリケーションの人気が高まるにつれて、WebSocket テクノロジはますます重要です。 Workerman は、PHP 環境で実行される高性能の非同期 TCP、UDP、および Unix Socket ネットワーク フレームワークであり、本質的に高い同時実行性をサポートしており、WebSocket サーバーの開発に非常に適しています。
この記事では、WebSocket 接続の処理方法、WebSocket メッセージの送受信方法、フレームワークと他のライブラリとの統合方法など、Workerman を使用して WebSocket サーバーを実装する方法を詳しく紹介します。完全なサンプル コードも記事の最後に記載されています。
Workerman の使用を開始する前に、Workerman をインストールする必要があります。 Composer を介してインストールすることも、GitHub からソース コードを直接ダウンロードして手動でインストールすることもできます。ここでは Composer のインストールを例に挙げます。
composer require workerman/workerman
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 つのコールバック関数のみを定義します。
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 "; };
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 サーバーを実装するのは簡単で、他のフレームワークに簡単に統合できます。
以下は、クライアントから送信されたメッセージを受信して簡単な処理を実行し、処理結果を返信する完全な 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 サイトの他の関連記事を参照してください。