WorkerMan 3.x 手册

异步react/mysql

(要求Workerman版本>=3.3.6)

注意:

此组件是第三方组件,可能会有潜在的bug,建议使用Workerman\MySQL组件。

安装:

composer require react/mysql

示例:

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;

$worker = new Worker('text://0.0.0.0:6161');

// 进程启动时
$worker->onWorkerStart = function() {
    global $mysql;
    // 获得workerman的event-loop,
    $loop  = Worker::getEventLoop();
    // 连接参数
    $mysql = new React\MySQL\Connection($loop, array(
        'host'   => '127.0.0.1', // 不要写localhost
        'dbname' => '数据库名',
        'user'   => '用户名',
        'passwd' => '密码',
    ));
    // 出现错误时
    $mysql->on('error', function($e){
        echo $e;
    });
    // 执行连接
    $mysql->connect(function ($e) {
        if($e) {
            echo $e;
        } else {
            echo "connect success\n";
        }
    });
};
// 收到客户端请求时
$worker->onMessage = function($connection, $data) {
    global $mysql;
    // 执行异步查询
    $mysql->query('show databases' /*$data*/, function ($command, $mysql) use ($connection) {
        if ($command->hasError()) {
            $error = $command->getError();
        } else {
            $results = $command->resultRows;
            $fields  = $command->resultFields;
            $connection->send(json_encode($results));
        }
    });
};

Worker::runAll();

文档:

https://github.com/bixuehujin/reactphp-mysql

注意:

1、所有的异步编码必须在onXXX回调中编写

2、异步客户端需要的$loop变量请使用Worker::getEventLoop();返回值