ホームページ  >  記事  >  PHPフレームワーク  >  Workerman を使用してリアルタイム監視システムを実装する方法

Workerman を使用してリアルタイム監視システムを実装する方法

WBOY
WBOYオリジナル
2023-11-07 11:00:11720ブラウズ

Workerman を使用してリアルタイム監視システムを実装する方法

インターネットの急速な発展とリアルタイム監視に対する人々の需要の高まりに伴い、Web ベースのリアルタイム監視システムの人気が高まっています。この記事では、Workerman を使用してリアルタイム監視システムを実装する方法を紹介します。このシステムは、ログ、パフォーマンス指標、マシンの状態など、必要に応じて複数のデータ タイプを監視できます。また、管理者を支援するリアルタイム アラーム機能も提供します。システムの稼働状況をタイムリーに把握します。

Workerman は、純粋な PHP で書かれた高性能 TCP/UDP サーバー フレームワークで、高い同時実行性、低いレイテンシー、簡単な拡張という特徴があります。 Workerman を使用すると、ロング リンク サービス、チャット ルーム、オンライン ゲーム サーバーなど、高性能で同時実行性の高いアプリケーション シナリオを簡単に実装できます。以下では、Workerman を使用してリアルタイム監視システムを実装する方法を紹介します。

  1. Workerman アプリケーションの作成

Workerman を使用する前に、フレームワークをダウンロードしてインストールする必要があります。ここでは Linux 環境を例として、composer を使用してインストールします。ターミナルに次のコマンドを入力して Workerman をインストールします。

composer require workman/workerman

インストールが完了したら、PHP ファイルを作成して最初の Workerman アプリケーションを作成できます。

require_once DIR . '/vendor/autoload.php';

// ポート 2345 をリッスンし、次を使用して通信するワーカーを作成します。 WebSocket プロトコル
$ws_worker = new WorkermanWorker("websocket://0.0.0.0:2345");

// 外部サービスを提供する 4 つのプロセスを開始します
$ws_worker->count = 4;

// クライアントが正常に接続したら、ウェルカム メッセージを送信します。
$ws_worker->onConnect = function ($connection) {

$connection->send('Welcome to workerman!');

};

// クライアントがデータを送信すると、それを処理します。
$ws_worker->onMessage = function ($connection, $data) {

// 把收到的消息回显给客户端
$connection->send($data);

};

// クライアントがデータを送信するとき、切断 接続されたら、プロセス
$ws_worker->onClose = function ($connection) {

echo "Connection closed

";
};

// Worker
WorkermanWorker を実行します。 :run();

上記のコードでは、ポート 2345 をリッスンし、WebSocket プロトコルを使用して通信するワーカーを作成しました。クライアントが正常に接続すると、ウェルカム メッセージが送信されます。クライアントがデータを送信すると、ウェルカム メッセージが送信されます。 , 受信したデータはクライアントにエコーされます; クライアントが切断すると、接続が閉じられたことを示すメッセージが出力されます. 最後に Worker を起動して実行します。

  1. リアルタイム監視機能

Workerman アプリケーションを正常に作成できましたが、これではリアルタイム監視のニーズが満たされません。次に、Workerman を使用してリアルタイム監視機能を実装する方法を紹介します。リアルタイムを明確にする必要があります 監視システムはどのようなデータを監視する必要がありますか? ここでは例としてログを取り上げます

2.1 監視ログ

リアルタイム監視システムは、業務システムで生成されたログをリアルタイムでフロントエンドにプッシュ表示 Worker の onMessage コールバック関数で業務システムのログディレクトリを監視し、ログ内容をリアルタイムでフロントエンドに送信できます。コードは次のとおりです:

require_once DIR . '/vendor /autoload.php';
use WorkermanLibTimer;
use WorkermanWorker;

$ws_worker = new Worker("websocket://0.0.0.0:2345");

$ ws_worker->count = 4;

$log_dir = '/path/to/log-dir/ ';
$monitor_interval = 1; // ログ ファイルを監視する時間間隔、単位: 秒

$ws_worker->onMessage = function ($connection, $data) use($log_dir) {

// do something

};

$ws_worker->onClose = function ( $connection) {

echo "Connection closed

";
};

// モニターログ ファイル
Timer::add($monitor_interval, function () use($ws_worker, $log_dir ) {

if (!is_dir($log_dir)) {
    return;
}
$files = scandir($log_dir);
foreach ($files as $file) {
    if ($file == "." || $file == "..") {
        continue;
    }
    $filename = $log_dir . '/' . $file;
    if (is_file($filename)) {
        $fp = fopen($filename, 'r');
        $lastpos = $ws_worker->lastpos[$filename] ?? 0;
        fseek($fp, $lastpos);
        $data = fread($fp, filesize($filename) - $lastpos);
        fclose($fp);
        if (!empty($data)) {
            // 实时推送日志信息到前端
            foreach($ws_worker->connections as $con){
                if ($con->websocket) {
                    $con->send(json_encode(array(
                        'type' => 'log',
                        'data' => $data,
                        'filename' => $filename
                    )));
                }
            }
            // 更新上次读取位置
            $ws_worker->lastpos[$filename] = ftell($fp);
        }
    }
}

});

Workerman は、トリガーできる Timer クラスを提供します。コールバック関数を定期的に使用すると、ログ ディレクトリを定期的に監視できます。ログの内容を読み取るときは、同じ位置の内容を繰り返し読み込まないよう、最後に読み取った位置に注意する必要があります。ログの内容を読み取った後、フロントエンドにプッシュしてリアルタイムに表示します。

2.2 リアルタイムアラーム機能の実現

リアルタイム監視システムでは、リアルタイムアラーム機能も欠かせません。監視により検知したアラームイベントが発生した際に、リアルタイムにアラーム情報をフロントエンドに送信できます。以下はアラート関数のコード例です:

require_once DIR . '/vendor/autoload.php';
use WorkermanLibTimer;
use WorkermanWorker;

$ws_worker = new Worker("websocket://0.0.0.0:2345");

$ws_worker->count = 4;

$alarm_interval = 1; //アラーム イベントの監視時間間隔、単位: 秒

$ws_worker->onMessage = function ($connection, $data) {

// do something

};

$ws_worker-> ;onClose = function ($connection) {

echo "Connection closed

";
};

// アラーム イベントを監視する
Timer::add($alarm_interval, function () use( $ws_worker ) {

// 监控逻辑
$alarm_type = 'warning'; // 告警类型
$alarm_data = 'alarm data'; // 告警数据
if ($alarm_type && $alarm_data) {
    // 实时推送告警信息到前端
    foreach($ws_worker->connections as $con){
        if ($con->websocket) {
            $con->send(json_encode(array(
                'type' => 'alarm',
                'data' => $alarm_data,
                'alarm_type' => $alarm_type
            )));
        }
    }
}

});

アラーム イベントを定期的に監視し、特定のビジネス ニーズに従って監視ロジックが実装されます。アラーム イベントの発生が検出されると、アラーム情報が表示されます。リアルタイムでフロントエンドにプッシュされます。

  1. 概要

Workermanを利用してリアルタイム監視システムを導入すると、システムの稼働状況をリアルタイムに把握し、システムの運用保守の効率と精度を向上させることができます。この記事では、Workerman を使用して監視システムにログ監視とリアルタイム アラーム機能を実装する方法を紹介し、対応するコード例も示します。これらの基盤により、特定のビジネス ニーズに応じて拡張し、より完全なリアルタイム監視システムを完成させることができます。

以上がWorkerman を使用してリアルタイム監視システムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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