ワーカーマン開発モデル: リアルタイム データ プッシュ機能のベスト プラクティス
はじめに:
インターネットの急速な発展に伴い、リアルタイム データ プッシュは多くのアプリケーションにとって必要な機能になりました。 PHP の分野では、Workerman は間違いなく最も強力なリアルタイム データ プッシュ フレームワークの 1 つです。この記事では、Workerman を使用してリアルタイム データ プッシュ機能を開発する方法を説明し、いくつかのベスト プラクティス コード例を示します。
1. ワーカーマンとは何ですか?
Workerman は、PHP 分野における高性能 PHP 非同期ネットワーク通信フレームワークであり、依存関係のない純粋な PHP に基づいて開発されており、独立して実行できます。 Workerman はノンブロッキング IO モデルを採用しており、多数の同時接続を処理できます。同時に、便利で使いやすいインターフェイスも提供し、開発者が高性能のリアルタイム アプリケーションを迅速に開発できるようにします。
2. シンプルなリアルタイム データ プッシュ アプリケーションを作成する
まず、composer を使用して Workerman をインストールする必要があります:
composer require workerman/workerman
次に、server.php ファイルを作成し、次のコード:
<?php require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // 创建一个Worker监听8080端口,使用websocket协议通讯 $ws_worker = new Worker('websocket://0.0.0.0:8080'); // 启动4个进程对外提供服务 $ws_worker->count = 4; // 当客户端与服务端建立连接时触发 $ws_worker->onConnect = function ($connection) { echo "New connection "; }; // 当客户端给服务端发送消息时触发 $ws_worker->onMessage = function ($connection, $data) use ($ws_worker) { // 将消息广播给所有客户端 foreach ($ws_worker->connections as $client_connection) { $client_connection->send($data); } }; // 当客户端与服务端断开连接时触发 $ws_worker->onClose = function ($connection) { echo "Connection closed "; }; // 运行worker Worker::runAll();
このコードは単に WebSocket サーバーを作成するだけであり、新しいクライアントが接続するか、メッセージを送信するか、切断すると、対応するイベントがトリガーされます。特定のイベント処理ロジックは、実際のニーズに応じて変更できます。
3. クライアント コードの例
リアルタイム データ プッシュ機能をテストするために、クライアントをシミュレートする単純な HTML ファイルを作成できます。この HTML ファイルでは、JavaScript を使用して WebSocket 接続を実装し、メッセージを送受信します。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>实时数据推送</title> <script> var ws = new WebSocket('ws://127.0.0.1:8080'); ws.onopen = function () { console.log('已连接服务器'); }; ws.onmessage = function (event) { console.log('收到消息:' + event.data); }; function send() { var message = document.getElementById('message').value; ws.send(message); console.log('发送消息:' + message); } </script> </head> <body> <input type="text" id="message" placeholder="请输入要发送的消息"> <button onclick="send()">发送</button> </body> </html>
この JavaScript コードは、WebSocket 接続を作成し、サーバーとの接続の確立、メッセージの受信、およびメッセージの送信に関連するイベントを定義します。入力ボックスに送信したいメッセージを入力して「送信」ボタンをクリックすると、メッセージがサーバーに送信され、受信したメッセージがコンソールに表示されます。
4. ベスト プラクティス
実際の開発では、権限制御、グループ管理、メッセージ検証など、考慮する必要がある要素が数多くあります。ベスト プラクティスのサンプル コードを次に示します。
// 在onConnect事件中验证用户登录 $ws_worker->onConnect = function ($connection) { // 获取用户token $token = $connection->getRequestHeader('token'); // 验证token if (!verifyToken($token)) { $connection->close(); } };
// 创建分组、加入分组和发送给指定分组的示例代码 $group = new WorkermanConnectionConnections(); $group->add($client_connection); $ws_worker->group['group_name'] = $group; ... // 发送消息给指定分组 $ws_worker->group['group_name']->send($data);
// 在onMessage事件中判断要发送的客户端id $id = $data['recipient_id']; if ($connection = $ws_worker->uidConnections[$id] ?? null) { // 找到对应的客户端连接并发送消息 $connection->send($data); }
結論:
この記事では、Workerman フレームワークを使用してリアルタイム データ プッシュ関数を開発する方法を紹介し、いくつかのベスト プラクティス コード例を示します。これらの例を学ぶことで、読者はすぐに Workerman を使い始め、それを使用して高性能のリアルタイム アプリケーションを開発できると思います。 Workerman についてさらに詳しく学びたい場合は、詳細な公式ドキュメントを参照してください。 Workerman を使用してリアルタイム データ プッシュ機能を開発できることを願っています。
以上がワーカーマン開発モデル: リアルタイム データ プッシュ機能を実装するためのベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。