這個(gè)例子中的
$connection_to_mysql = new AsyncTcpConnection($REAL_MYSQL_ADDRESS);
這個(gè)連接對(duì)象能不能被緩存呢?讓所有鏈接上來的客戶端都使用這個(gè)連接對(duì)象去訪問mysql
use \Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
require_once './Workerman/Autoloader.php';
// 真實(shí)的mysql地址,假設(shè)這里是本機(jī)3306端口
$REAL_MYSQL_ADDRESS = 'tcp://127.0.0.1:3306';
// 代理監(jiān)聽本地4406端口
$proxy = new Worker('tcp://0.0.0.0:4406');
$proxy->onConnect = function($connection)
{
global $REAL_MYSQL_ADDRESS;
// 異步建立一個(gè)到實(shí)際mysql服務(wù)器的連接
$connection_to_mysql = new AsyncTcpConnection($REAL_MYSQL_ADDRESS);
// mysql連接發(fā)來數(shù)據(jù)時(shí),轉(zhuǎn)發(fā)給對(duì)應(yīng)客戶端的連接
$connection_to_mysql->onMessage = function($connection_to_mysql, $buffer)use($connection)
{
$connection->send($buffer);
};
// mysql連接關(guān)閉時(shí),關(guān)閉對(duì)應(yīng)的代理到客戶端的連接
$connection_to_mysql->onClose = function($connection_to_mysql)use($connection)
{
$connection->close();
};
// mysql連接上發(fā)生錯(cuò)誤時(shí),關(guān)閉對(duì)應(yīng)的代理到客戶端的連接
$connection_to_mysql->onError = function($connection_to_mysql)use($connection)
{
$connection->close();
};
// 執(zhí)行異步連接
$connection_to_mysql->connect();
// 客戶端發(fā)來數(shù)據(jù)時(shí),轉(zhuǎn)發(fā)給對(duì)應(yīng)的mysql連接
$connection->onMessage = function($connection, $buffer)use($connection_to_mysql)
{
$connection_to_mysql->send($buffer);
};
// 客戶端連接斷開時(shí),斷開對(duì)應(yīng)的mysql連接
$connection->onClose = function($connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
// 客戶端連接發(fā)生錯(cuò)誤時(shí),斷開對(duì)應(yīng)的mysql連接
$connection->onError = function($connection)use($connection_to_mysql)
{
$connection_to_mysql->close();
};
};
// 運(yùn)行worker
Worker::runAll();