>  기사  >  백엔드 개발  >  Swoole과 Workerman의 메시지 큐 및 실시간 모니터링 협업 처리 기능

Swoole과 Workerman의 메시지 큐 및 실시간 모니터링 협업 처리 기능

WBOY
WBOY원래의
2023-10-15 15:35:01953검색

Swoole과 Workerman의 메시지 큐 및 실시간 모니터링 협업 처리 기능

Swoole과 Workerman은 고성능 네트워크 프로그래밍과 실시간 애플리케이션 개발에 널리 사용되는 두 가지 인기 있는 PHP 프레임워크입니다. 이들은 모두 강력한 메시지 대기열과 실시간 모니터링 기능을 갖추고 있어 협업 처리를 통해 보다 효율적인 작업 실행 및 시스템 관리를 달성할 수 있습니다.

메시지 대기열은 메시지 발신자와 수신자를 분리하는 메커니즘이며 비동기 시나리오에서 많은 수의 메시지 또는 작업을 처리하는 데 사용됩니다. Swoole과 Workerman은 모두 여러 작업 간의 종속성을 해결하고, 시간이 많이 걸리는 작업을 비동기 처리를 위해 대기열에 넣고, 시스템의 응답 속도와 동시성 기능을 향상시키는 데 사용할 수 있는 메시지 대기열 구현을 제공합니다.

Swoole의 메시지 큐는 공유 메모리와 디스크 파일 기반 방식을 사용하여 안정성과 성능이 뛰어납니다. 다음은 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);
}

Workerman의 메시지 대기열은 Redis를 기본 저장소로 사용하고 Redis의 게시 및 구독 메커니즘을 통해 메시지 보내기 및 받기를 구현합니다. 다음은 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();

실시간 모니터링이란 시스템의 상태 및 성능 지표를 실시간으로 볼 수 있어 개발자가 시스템의 작동을 이해하는 데 도움이 된다는 것을 의미합니다. Swoole과 Workerman은 모두 개발자가 문제를 신속하게 찾아 해결하는 데 도움이 되는 강력한 실시간 모니터링 기능을 제공합니다. 다음은 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();

위 코드에서는 HTTP 서버가 생성되고, 요청이 수신되면 현재 서버의 상태 및 통계가 반환됩니다. http://localhost:9501에 접속하시면 실시간 모니터링 정보를 보실 수 있습니다.

Workerman의 실시간 모니터링을 위해서는 influxdb에 성능 데이터를 저장하고 grafana를 통해 표시할 수 있는 grafana+influxdb와 같은 타사 모니터링 도구를 사용해야 합니다. 다음은 단순화된 샘플 코드입니다.

<?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();

위 코드에서는 타이머를 통해 influxdb에 성능 데이터를 쓰기 위해 Worker에서 상속된 사용자 정의 Worker 클래스가 생성되었습니다. 개발자는 grafana에서 데이터 소스와 대시보드를 구성하여 시스템 작동을 실시간으로 모니터링할 수 있습니다.

결론적으로 Swoole과 Workerman은 모두 강력한 메시지 큐와 실시간 모니터링 기능을 갖추고 있어 개발자가 고성능 실시간 애플리케이션 시스템을 구축하는 데 도움이 됩니다. 개발자는 자신의 필요에 따라 적절한 프레임워크를 선택하고 샘플 코드를 기반으로 실용적인 애플리케이션을 개발할 수 있습니다.

위 내용은 Swoole과 Workerman의 메시지 큐 및 실시간 모니터링 협업 처리 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.