ホームページ  >  記事  >  PHPフレームワーク  >  ワーカーマン開発モデル: リアルタイム データ プッシュ機能を実装するためのベスト プラクティス

ワーカーマン開発モデル: リアルタイム データ プッシュ機能を実装するためのベスト プラクティス

PHPz
PHPzオリジナル
2023-08-05 08:13:131061ブラウズ

ワーカーマン開発モデル: リアルタイム データ プッシュ機能のベスト プラクティス

はじめに:
インターネットの急速な発展に伴い、リアルタイム データ プッシュは多くのアプリケーションにとって必要な機能になりました。 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. ベスト プラクティス
実際の開発では、権限制御、グループ管理、メッセージ検証など、考慮する必要がある要素が数多くあります。ベスト プラクティスのサンプル コードを次に示します。

  1. ユーザー ログインの検証:
// 在onConnect事件中验证用户登录
$ws_worker->onConnect = function ($connection) {
    // 获取用户token
    $token = $connection->getRequestHeader('token');
    // 验证token
    if (!verifyToken($token)) {
        $connection->close();
    }
};
  1. グループ管理:
// 创建分组、加入分组和发送给指定分组的示例代码
$group = new WorkermanConnectionConnections();
$group->add($client_connection);
$ws_worker->group['group_name'] = $group;
...

// 发送消息给指定分组
$ws_worker->group['group_name']->send($data);
  1. 指定されたクライアントにメッセージを送信する:
// 在onMessage事件中判断要发送的客户端id
$id = $data['recipient_id'];
if ($connection = $ws_worker->uidConnections[$id] ?? null) {
    // 找到对应的客户端连接并发送消息
    $connection->send($data);
}

結論:
この記事では、Workerman フレームワークを使用してリアルタイム データ プッシュ関数を開発する方法を紹介し、いくつかのベスト プラクティス コード例を示します。これらの例を学ぶことで、読者はすぐに Workerman を使い始め、それを使用して高性能のリアルタイム アプリケーションを開発できると思います。 Workerman についてさらに詳しく学びたい場合は、詳細な公式ドキュメントを参照してください。 Workerman を使用してリアルタイム データ プッシュ機能を開発できることを願っています。

以上がワーカーマン開発モデル: リアルタイム データ プッシュ機能を実装するためのベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。