第二课:workerman之MySQL代理

一 课前准备知识

第二课:workerman之MySQL代理_第1张图片
课前知识

第二课:workerman之MySQL代理_第2张图片
MySQL服务的和客户端通讯机制

二 代码实现

onConnect = function($connection)
{
    global $REAL_MYSQL_ADDRESS;
    // 异步建立一个到实际mysql服务器的连接
    $connection_to_mysql = new AsyncTcpConnection($REAL_MYSQL_ADDRESS);
    // mysql连接发来数据时,转发给对应客户端的连接
    $connection_to_mysql->onMessage = function($connection_to_mysql, $buffer)use($connection)
    {
        $connection->send($buffer);
    };
    // mysql连接关闭时,关闭对应的代理到客户端的连接
    $connection_to_mysql->onClose = function($connection_to_mysql)use($connection)
    {
        $connection->close();
    };
    // mysql连接上发生错误时,关闭对应的代理到客户端的连接
    $connection_to_mysql->onError = function($connection_to_mysql)use($connection)
    {
        $connection->close();
    };
    // 执行异步连接
    $connection_to_mysql->connect();

    // 客户端发来数据时,转发给对应的mysql连接
    $connection->onMessage = function($connection, $buffer)use($connection_to_mysql)
    {
        echo $buffer.PHP_EOL;
        $connection_to_mysql->send($buffer);
    };
    // 客户端连接断开时,断开对应的mysql连接
    $connection->onClose = function($connection)use($connection_to_mysql)
    {
        $connection_to_mysql->close();
    };
    // 客户端连接发生错误时,断开对应的mysql连接
    $connection->onError = function($connection)use($connection_to_mysql)
    {
        $connection_to_mysql->close();
    };

};
// 运行worker
Worker::runAll();

三 客户端连接测试

我这里用的是mysql workbench

第二课:workerman之MySQL代理_第3张图片
mysql workbench

四 后台报文日志

第二课:workerman之MySQL代理_第4张图片
mysql log

你可能感兴趣的