Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Baris gilir mesej Swoole dan Workerman dan keupayaan pemprosesan kolaboratif pemantauan masa nyata

Baris gilir mesej Swoole dan Workerman dan keupayaan pemprosesan kolaboratif pemantauan masa nyata

WBOY
WBOYasal
2023-10-15 15:35:01953semak imbas

Baris gilir mesej Swoole dan Workerman dan keupayaan pemprosesan kolaboratif pemantauan masa nyata

Swoole dan Workerman ialah dua rangka kerja PHP popular yang digunakan secara meluas untuk pengaturcaraan rangkaian berprestasi tinggi dan pembangunan aplikasi masa nyata. Kesemuanya mempunyai baris gilir mesej dan fungsi pemantauan masa nyata Melalui pemprosesan kolaboratif, mereka boleh mencapai pelaksanaan tugas dan pengurusan sistem yang lebih cekap.

Baris gilir mesej ialah mekanisme yang memisahkan pengirim dan penerima mesej dan digunakan untuk memproses sebilangan besar mesej atau tugasan dalam senario tak segerak. Kedua-dua Swoole dan Workerman menyediakan pelaksanaan baris gilir mesej, yang boleh digunakan untuk menyelesaikan kebergantungan antara berbilang tugas, meletakkan operasi yang memakan masa ke dalam baris gilir untuk pemprosesan tak segerak dan meningkatkan kelajuan tindak balas sistem dan keupayaan serentak.

Baris gilir mesej Swoole menggunakan kaedah berdasarkan memori kongsi dan fail cakera, dengan kebolehpercayaan dan prestasi yang sangat baik. Berikut ialah contoh kod yang menunjukkan cara menggunakan baris gilir mesej Swoole:

<?php
$queue = new SwooleMsgQueue(0x7000001);
$pid = pcntl_fork();
if ($pid == -1) {
    die("fork failed
");
} elseif ($pid > 0) {
    // 父进程,发送消息到队列
    $message = "Hello, Swoole!";
    $queue->push($message);
    echo "Message sent: $message
";
    pcntl_wait($status);
} else {
    // 子进程,接收消息并处理
    $message = $queue->pop();
    echo "Message received: $message
";
    exit(0);
}

Baris gilir mesej pekerja menggunakan Redis sebagai storan asas, dan melaksanakan penghantaran dan penerimaan mesej melalui mekanisme penerbitan dan langganan Redis. Berikut ialah contoh kod yang menunjukkan cara menggunakan baris gilir mesej Workerman:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;
use WorkermanLibTimer;

$worker = new Worker();
$worker->count = 1;

$worker->onWorkerStart = function ($worker) {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    
    // 订阅名为“task”的频道
    $redis->subscribe(['task'], function ($redis, $channel, $message) {
        echo "Message received: $message
";
        // 在这里处理消息
    });
};

Worker::runAll();

Pemantauan masa nyata bermakna status dan penunjuk prestasi sistem boleh dilihat dalam masa nyata, membantu pembangun memahami pengendalian sistem. Kedua-dua Swoole dan Workerman menyediakan fungsi pemantauan masa nyata yang berkuasa yang boleh membantu pembangun mencari dan menyelesaikan masalah dengan cepat. Berikut ialah contoh kod yang menunjukkan cara menggunakan pemantauan masa nyata Swoole:

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501);

$http->on('request', function ($request, $response) use ($http) {
    $stats = $http->stats();
    $response->end(json_encode($stats));
});

$http->start();

Dalam kod di atas, pelayan HTTP dibuat dan apabila permintaan diterima, status dan statistik pelayan semasa dikembalikan. Anda boleh melihat maklumat pemantauan masa nyata dengan melawati http://localhost:9501.

Pemantauan masa nyata pekerja memerlukan penggunaan alat pemantauan pihak ketiga, seperti grafana+influxdb, yang boleh menyimpan data prestasi dalam influxdb dan memaparkannya melalui grafana. Berikut ialah kod sampel yang dipermudahkan:

<?php
$worker = new WorkermanWorker('text://0.0.0.0:1234');
$worker->count = 1;

$worker->task = function ($connection, $data) {
    // 处理任务
    $connection->send("Task completed");
};

$worker->onWorkerStart = function ($worker) {
    // 创建一个influxdb的连接
    $client = new InfluxDBClient('localhost', '8086');
    $database = $client->selectDB('workerman_stats');
    
    // 创建一个定时器,定时将性能数据写入influxdb
    Timer::add(1, function () use ($worker, $database) {
        $data = [
            [
                'measurement' => 'connections',
                'tags' => [
                    'worker' => $worker->id,
                ],
                'fields' => [
                    'value' => count($worker->connections),
                ],
            ],
        ];
        
        $database->writePoints($data);
    });
};

Worker::runAll();

Dalam kod di atas, kelas Pekerja tersuai yang diwarisi daripada Worker dicipta untuk menulis data prestasi ke dalam influxdb melalui pemasa. Pembangun boleh mengkonfigurasi sumber data dan papan pemuka dalam grafana untuk memantau operasi sistem dalam masa nyata.

Ringkasnya, kedua-dua Swoole dan Workerman mempunyai baris gilir mesej yang berkuasa dan fungsi pemantauan masa nyata, yang boleh membantu pembangun membina sistem aplikasi masa nyata berprestasi tinggi. Pembangun boleh memilih rangka kerja yang sesuai mengikut keperluan mereka sendiri dan menjalankan pembangunan aplikasi praktikal berdasarkan kod sampel.

Atas ialah kandungan terperinci Baris gilir mesej Swoole dan Workerman dan keupayaan pemprosesan kolaboratif pemantauan masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn