PHP 및 MySQL 메시지 대기열에 대한 Swoole 및 Workerman의 실시간 처리 기능

王林
풀어 주다: 2023-10-15 16:36:01
원래의
989명이 탐색했습니다.

PHP 및 MySQL 메시지 대기열에 대한 Swoole 및 Workerman의 실시간 처리 기능

Swoole 및 Workerman: PHP 및 MySQL 메시지 대기열의 실시간 처리 기능

소개:
인터넷 기술의 지속적인 발전으로 인해 실시간 메시지 처리는 많은 웹 응용 프로그램의 중요한 요구 사항이 되었습니다. 웹 개발에 널리 사용되는 언어로서 PHP는 실시간 처리 기능을 달성하는 데 몇 가지 어려움을 겪었습니다. 그러나 두 가지 고성능 PHP 확장인 Swoole 및 Workerman을 사용하면 PHP 및 MySQL 메시지 대기열의 실시간 처리 기능을 쉽게 구현할 수 있습니다. 이 기사에서는 Swoole 및 Workerman의 사용법을 자세히 소개하고 구체적인 코드 예제를 제공합니다.

1. Swoole 소개
Swoole은 PHP 개발자에게 고성능 네트워크 통신 기능을 제공하는 확장 프로그램입니다. 고성능 네트워크 서버와 실시간 메시지 처리 시스템을 구현하는 데 사용할 수 있는 비차단 비동기 TCP, UDP, HTTP, WebSocket 서버 및 클라이언트 세트를 제공합니다. PHP 및 MySQL 메시지 대기열의 실시간 처리 기능을 구현한다는 측면에서 Swoole은 상대적으로 높은 동시 처리 기능을 제공할 수 있습니다.

다음은 Swoole을 사용하여 PHP 및 MySQL 메시지 대기열을 구현하기 위한 샘플 코드입니다.

<?php
class MySQLQueue {
    private $server;
    private $pool;
    
    public function __construct($server, $pool){
        $this->server = $server;
        $this->pool = $pool;
    }
    
    public function pop(){
        $result = $this->server->taskwait(function ($mysql_connection){
            return $mysql_connection->query("SELECT * FROM queue WHERE status = 0 LIMIT 1");
        }, $this->pool, function ($result, $db){
            $db->query("UPDATE queue SET status = 1 WHERE id = {$result['id']}");
        });
        
        return $result;
    }
}

$serv = new swoole_server("127.0.0.1", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);
$pool = new swoole_connpool(SWOOLE_MYSQL);
$pool->server = $serv;
$pool->onRequest = function ($conn){
    $mysql = new SwooleCoroutineMySQL();
    $mysql->connect(['host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'password' => 'password', 'database' => 'test']);
    $conn->send((new MySQLQueue($this->server, $this))->pop());
};

$serv->set(array('worker_num' => 4, 'task_worker_num' => 4));
$serv->start();
로그인 후 복사

위 코드에서는 pop() 메서드를 사용하여 MySQLQueue 클래스를 정의합니다. 파일의 MySQL 데이터에서 메시지 큐를 얻고 상태 플래그를 1(처리되었음을 나타냄)로 설정합니다. Swoole 서버에서는 $server->taskwait() 메서드를 사용하여 비동기 MySQL 쿼리를 수행합니다. $this->pool은 이전에 생성한 연결을 나타냅니다. . pop()方法用于从MySQL中获取消息队列中的数据,并将状态标志设为1(表示已处理)。在Swoole的服务器中,我们使用了$server->taskwait()方法来进行异步MySQL查询,$this->pool表示我们之前创建的连接池。

二、Workerman简介
Workerman是另一个提供高性能网络编程能力的PHP开源框架。它提供了一套简单易用、高性能的网络通信API,用于构建实时应用。Workerman可以用于构建Web服务器、WebSockets服务器和TCP/UDP服务器等多种类型的应用。

以下是使用Workerman实现PHP与MySQL消息队列的示例代码:

<?php
require_once '/path/to/vendor/autoload.php';
use WorkermanWorker;
use WorkermanLibTimer;

$worker = new Worker();
$worker->count = 4;
$worker->onWorkerStart = function($worker) {
    $mysql = new WorkermanMySQLConnection('127.0.0.1', '3306', 'root', 'password', 'test');
    Timer::add(1, function() use ($worker, $mysql) {
        $result = $mysql->select('*')->from('queue')->where('status=0')->limit(1)->query();
        if (!$result) {
            return;
        }
        $mysql->update('queue')->set('status=1')->where('id=?', $result[0]['id'])->query();
        foreach ($worker->connections as $connection) {
            $connection->send(json_encode($result[0]));
        }
    });
};

$worker->onConnect = function($connection) {
    $connection->send('Connected');
};

$worker->onMessage = function($connection, $data) {
    $connection->send('Received: ' . $data);
};
Worker::runAll();
로그인 후 복사

在上述代码中,我们使用了WorkermanMySQL扩展来连接MySQL数据库。$worker->onWorkerStart

2. Workerman 소개

Workerman은 고성능 네트워크 프로그래밍 기능을 제공하는 또 다른 PHP 오픈 소스 프레임워크입니다. 실시간 애플리케이션 구축을 위한 사용하기 쉬운 고성능 네트워크 통신 API 세트를 제공합니다. Workerman은 웹 서버, WebSocket 서버, TCP/UDP 서버 등 다양한 유형의 애플리케이션을 구축하는 데 사용할 수 있습니다.

다음은 Workerman을 사용하여 PHP 및 MySQL 메시지 대기열을 구현하기 위한 샘플 코드입니다. 🎜rrreee🎜위 코드에서는 WorkermanMySQL 확장을 사용하여 MySQL 데이터베이스에 연결합니다. $worker->onWorkerStart 메서드는 주기적으로 데이터베이스의 메시지 대기열을 쿼리하고 쿼리 결과가 비어 있지 않으면 모든 클라이언트 연결에 결과를 보냅니다. 🎜🎜결론: 🎜이 기사에서는 PHP 및 MySQL 메시지 대기열의 실시간 처리 기능을 구현하는 두 가지 고성능 PHP 확장인 Swoole 및 Workerman을 소개하고 해당 코드 예제를 제공합니다. Swoole과 Workerman을 사용함으로써 실시간 메시지 처리에서 PHP의 성능을 향상시키고 실시간 처리 기능에 대한 웹 애플리케이션의 요구 사항을 충족할 수 있습니다. 독자들이 이 글을 통해 Swoole과 Workerman의 기본적인 사용법을 이해하고, 실제 개발 시 자신의 프로젝트에 적용해 볼 수 있기를 바랍니다. 🎜

위 내용은 PHP 및 MySQL 메시지 대기열에 대한 Swoole 및 Workerman의 실시간 처리 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿