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
Workerman은 고성능 네트워크 프로그래밍 기능을 제공하는 또 다른 PHP 오픈 소스 프레임워크입니다. 실시간 애플리케이션 구축을 위한 사용하기 쉬운 고성능 네트워크 통신 API 세트를 제공합니다. Workerman은 웹 서버, WebSocket 서버, TCP/UDP 서버 등 다양한 유형의 애플리케이션을 구축하는 데 사용할 수 있습니다.
$worker->onWorkerStart
메서드는 주기적으로 데이터베이스의 메시지 대기열을 쿼리하고 쿼리 결과가 비어 있지 않으면 모든 클라이언트 연결에 결과를 보냅니다. 🎜🎜결론: 🎜이 기사에서는 PHP 및 MySQL 메시지 대기열의 실시간 처리 기능을 구현하는 두 가지 고성능 PHP 확장인 Swoole 및 Workerman을 소개하고 해당 코드 예제를 제공합니다. Swoole과 Workerman을 사용함으로써 실시간 메시지 처리에서 PHP의 성능을 향상시키고 실시간 처리 기능에 대한 웹 애플리케이션의 요구 사항을 충족할 수 있습니다. 독자들이 이 글을 통해 Swoole과 Workerman의 기본적인 사용법을 이해하고, 실제 개발 시 자신의 프로젝트에 적용해 볼 수 있기를 바랍니다. 🎜위 내용은 PHP 및 MySQL 메시지 대기열에 대한 Swoole 및 Workerman의 실시간 처리 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!