使用swoole搭建mysql线程池_swoole编译安装/数据库连接池/异步mysql客户端

本文介绍了如何在PHP 5.6上编译安装swoole并设置MySQL连接池,详细阐述了服务端和客户端的实现代码,包括同步和异步查询操作。通过示例展示了swoole的数据库连接管理和异步处理能力。
摘要由CSDN通过智能技术生成

一.编译安装php5.6

0.安装必要软件

http://www.cnblogs.com/itfenqing/p/6055138.html

1.下载php5.6.30

http://php.net/downloads.php

2.解压

3.编译时指定为mysqlnt,启用opcache

./configure --prefix=/usr/local/php56 --enable-fpm

--enable-mysqlnd --with-mysqli=mysqlnd

--with-mysql=mysqlnd --with-pdo-mysql=mysqlnd

--enable-debug --with-gd --with-jpeg-dir

--with-png-dir --with-freetype-dir

--enable-mbstring --with-curl

--with-libxml-dir --with-mysql

--enable-sockets --enable-bcmath

--enable-xml --with-bz2 --enable-zip

--enable-freetype --with-pdo-mysql

--with-mcrypt --enable-opcache

二.编译swoole

1.下载swoole1.9.0

2.解压

3.安装

/usr/local/php56/bin/phpize

./configure --with-php-config=/usr/local/php56/bin/php-config

make

make install

4.拷贝php.ini-production到/usr/local/php56/php.ini

5.在/usr/local/php56/php.ini下加入

[Zend Opcache]

zend_extension = /usr/local/php56/lib/php/extensions/debug-non-zts-20131226/opcache.so

opcache.enable=1 ;#启用操作码缓存

opcache.enable_cli=1 ;#仅针对CLI环境启用操作码缓存

opcache.memory_consumption=128 ;#共享内存大小,单位MB

opcache.interned_strings_buffer=8 ;#存储临时字符串的内存大小,单位MB

opcache.max_accelerated_files=4000 ;#哈希表中可存储的脚本文件数量上限

[Swoole]

extension = /usr/local/php56/lib/php/extensions/debug-non-zts-20131226/swoole.so

三.swoole数据库连接池

1.服务端代码:

$serv = new swoole_server("127.0.0.1", 9508);

$serv->set(array(

‘worker_num‘ => 100,

‘task_worker_num‘ => 10, //MySQL连接的数量

));

function my_onReceive($serv, $fd, $from_id, $data)

{

//taskwait就是投递一条任务,这里直接传递SQL语句了

//然后阻塞等待SQL完成

$result = $serv->taskwait($data);

if ($result !== false) {

list($status, $db_res) = explode(‘:‘, $result, 2);

if ($status == ‘OK‘) {

//数据库操作成功了,执行业务逻辑代码,这里就自动释放掉MySQL连接的占用

$serv->send($fd, var_export(unserialize($db_res), true) . "\n");

} else {

$serv->send($fd, $db_res);

}

return;

} else {

$serv->send($fd, "Error. Task timeout\n");

}

}

function my_onTask($serv, $task_id, $from_id, $sql)

{

static $link = null;

if ($link == null) {

$link = new mysqli("192.168.2.15", "root", "root", "test");

if (!$link) {

$link = null;

$serv->finish("ER:" . mysqli_error($link));

return;

}

}

$result = $link->query($sql);

if (!$result) {

$serv->finish("ER:" . mysqli_error($link));

return;

}

$data = $result->fetch_all(MYSQLI_ASSOC);

$serv->finish("OK:" . serialize($data));

}

function my_onFinish($serv, $data)

{

echo "AsyncTask Finish:Connect.PID=" . posix_getpid() . PHP_EOL;

}

$serv->on(‘Receive‘, ‘my_onReceive‘);

$serv->on(‘Task‘, ‘my_onTask‘);

$serv->on(‘Finish‘, ‘my_onFinish‘);

$serv->start();

2.客户端代码

$link=new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_SYNC);//TCP方式、同步

$link->connect(‘127.0.0.1‘,9508);//连接

$link->send(‘SELECT * FROM `test2`‘);//执行查询

$res=$link->recv();

if(!$res){

echo ‘Failed!‘;

}

else{

print_r($res);

}

$link->close();

三.异步mysql客户端

$db = new swoole_mysql;

$server = array(

‘host‘ => ‘192.168.2.15‘,

‘port‘ => ‘3306‘,

‘user‘ => ‘root‘,

‘password‘ => ‘root‘,

‘database‘ => ‘test‘,

‘charset‘ => ‘utf8‘, //指定字符集

‘timeout‘ => 30,

);

$db->connect($server, function ($db, $r) {

if ($r === false) {

var_dump($db->connect_errno, $db->connect_error);

die;

}

$sql = ‘select *,sleep(5) from test2‘;

$db->query($sql, function (swoole_mysql $db, $r) {

if ($r === false) {

var_dump($db->error, $db->errno);

} elseif ($r === true) {

var_dump($db->affected_rows, $db->insert_id);

}

var_dump($r);

$db->close();

});

});

echo ‘ok‘;

以上代码先输出ok,在输出mysql查询结果

swoole编译安装/数据库连接池/异步mysql客户端

标签:sql语句   close   configure   client   查询   libxml   php5.6.30   rom   targe

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/itfenqing/p/7111833.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值