Avec le développement rapide d'Internet et la demande croissante de surveillance en temps réel, les systèmes de surveillance en temps réel basés sur le Web deviennent de plus en plus populaires. Cet article explique comment utiliser Workerman pour mettre en œuvre un système de surveillance en temps réel. Le système peut surveiller plusieurs types de données selon les besoins, tels que les journaux, les indicateurs de performance, l'état de la machine, etc. Il fournit également des fonctions d'alarme en temps réel pour aider les administrateurs. saisir l'état de fonctionnement du système en temps opportun.
Workerman est un framework de serveur TCP/UDP hautes performances écrit en PHP pur, qui présente les caractéristiques d'une concurrence élevée, d'une faible latence et d'une expansion facile. Grâce à Workerman, vous pouvez facilement implémenter certains scénarios d'applications hautes performances et à haute concurrence, tels que des services de liaison longue, des salons de discussion, des serveurs de jeux en ligne, etc. Ci-dessous, nous expliquerons comment utiliser Workerman pour mettre en œuvre un système de surveillance en temps réel.
Avant d'utiliser Workerman, vous devez télécharger et installer le framework. Ici, nous prenons l'environnement Linux comme exemple et utilisons composer pour l'installer. Entrez la commande suivante dans le terminal pour installer Workerman :
composer require workerman/workerman
Une fois l'installation terminée, nous pouvons créer notre première application Workerman en créant un fichier PHP.
require_once DIR . '/vendor/autoload.php';
// Créez un Worker pour écouter le port 2345 et communiquer en utilisant le protocole websocket
$ws_worker = new WorkermanWorker("websocket:/ /0.0.0.0:2345");
// Démarrez 4 processus pour fournir des services au monde extérieur
$ws_worker->count = 4;
// Lorsque le client se connecte avec succès, envoyez un message de bienvenue
$ws_worker ->onConnect = function ($connection) {
$connection->send('Welcome to workerman!');
};
// Lorsque le client envoie des données, traitez-les
$ws_worker->onMessage = function ($connection, $data) {
// 把收到的消息回显给客户端 $connection->send($data);
};
// Lorsque Lorsque le client se déconnecte, traitez-le
$ws_worker->onClose = function ($connection) {
echo "Connection closed
";
};
// Run Worker
WorkermanWorker::run();
dans ce qui précède Dans le code, nous avons créé un Worker pour écouter le port 2345 et communiquer en utilisant le protocole websocket. Lorsque le client se connecte avec succès, un message de bienvenue sera envoyé lorsque le client enverra des données, les données reçues seront répercutées sur le client. client ; Lorsque le client se déconnecte, un message indiquant que la connexion est fermée sera affiché. Enfin, démarrez Worker pour l'exécuter
Nous avons maintenant créé avec succès une application Workerman, mais ceci. ne répond pas à nos besoins en matière de surveillance en temps réel. Ensuite, nous présenterons comment utiliser Workerman pour mettre en œuvre la fonction de surveillance en temps réel. Nous devons d'abord clarifier les données que notre système de surveillance en temps réel doit surveiller. logs à titre d'exemple.
Notre système de surveillance en temps réel. Nous devons surveiller les journaux générés dans le système d'entreprise et les transmettre au front-end pour les afficher en temps réel. Fonction de rappel onMessage de Worker, puis envoyez le contenu du journal au front-end en temps réel :
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; Intervalle de temps de surveillance des fichiers journaux, unité : secondes
$ws_worker->onMessage = function ( $connection, $data) use($log_dir) {
// do something
};
$ws_worker->onClose = function ($ connexion) {
echo "Connection closed
";
};
// Surveiller les fichiers journaux
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 fournit le Classe Timer, qui peut déclencher une fonction de rappel régulièrement. Nous pouvons l'utiliser pour surveiller régulièrement le répertoire des journaux. Lors de la lecture du contenu du journal, vous devez faire attention à la dernière position de lecture pour éviter de lire le contenu à la même position à plusieurs reprises. Après avoir lu le contenu du journal, poussez-le vers le front-end pour l'afficher en temps réel.
2.2 Réalisation de la fonction d'alarme en temps réel
Dans le système de surveillance en temps réel, la fonction d'alarme en temps réel est également un élément essentiel. Nous pouvons envoyer des informations d'alarme au frontal en temps réel lorsque des événements d'alarme détectés par la surveillance se produisent. Voici un exemple de code pour la fonction d'alerte :
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; // Intervalle de temps de surveillance des événements d'alarme, unité : secondes
$ws_worker->onMessage = function ($connection, $data) {
// do something
};
$ws_worker->onClose = function ($connection) {
echo "Connection closed
";
};
// Surveiller les événements d'alarme
// 监控逻辑 $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 ))); } } }
Surveillez régulièrement les événements d'alarme et la logique de surveillance est mise en œuvre en fonction des besoins spécifiques de l'entreprise. Lorsqu'un événement d'alarme se produit, les informations d'alarme sont transmises au front-end en temps réel. .
L'utilisation de Workerman pour mettre en œuvre un système de surveillance en temps réel peut nous aider à comprendre l'état de fonctionnement du système en temps réel et à améliorer l'efficacité et la précision de l'exploitation et de la maintenance du système. Cet article explique comment utiliser Workerman pour implémenter des fonctions de surveillance des journaux et d'alarme en temps réel dans le système de surveillance, et fournit également des exemples de code correspondants. Grâce à ces fondations, nous pouvons nous développer en conséquence en fonction des besoins spécifiques de l'entreprise et compléter un système de surveillance en temps réel plus complet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!