搜索
系统检测到您的用户名不符合规范:

swoole mysql连接池

浏览:6175 发布日期:2018年07月05日 分类:用法示例 关键字: php swoole mysql连接池
一直在用swoole mysql的连接池 原来的时候自己 在根目录 建立文件夹 server 然后 直接php mysql_pool.php 就可以执行 ;最近 升级了5.1.18 用系统的 怎么都搞不定有点 郁闷了 又致力与 mysql 连接池 异步 mysql的吗 一起搞搞啊 慢慢的还要加上去 一个队列 来对 超过的请求 进行排队
贴下 我原来自己用的 <?php
/**
* swoole 数据库连接池 BY 凌晨
'worker_num' => 20, //worker进程数量
'task_worker_num' => 10, //task进程数量 即为维持的MySQL连接的数量
'daemonize'=> 1, //设置守护进程
'max_request' => 10000, //最大请求数,超过了进程重启
'dispatch_mode' => 2,/
*/
class server_db_pool
{ //swoole set params
protected $task_worker_num;
protected $work_num;
protected $max_request;
protected $dispatch_mode;
protected $daemonize;
protected $server_port;
protected $log_file;
//db params
protected $db_host;
protected $db_user;
protected $db_pwd;
protected $db_name;
protected $db_port;

public function __construct()
{

$this->host = "127.0.0.1"; // server监听的端口
$this->server_port = 9508; // server监听的端口
$this->worker_num = 5;
$this->task_worker_num = 2;
$this->dispatch_mode = 2;
$this->daemonize = 0;
$this->max_request = 10000;

$filename=date("Y-m-d",time());
echo $this->log_file = "/www/web/public_html/tp5/server/swoole.log";

$this->serv = new swoole_server("127.0.0.1", $this->server_port);


$this->serv->set( array(
'worker_num'=>$this->worker_num,
'task_worker_num' => $this->task_worker_num,
'max_request' => $this->max_request,
'daemonize' => $this->daemonize,
'log_file' => $this->log_file,
'dispatch_mode' => $this->dispatch_mode,
));
}

public function run(){

$this->serv->on('Receive', array($this, 'onReceive'));
// Task 回调的2个必须函数
$this->serv->on('Task', array($this, 'onTask'));
$this->serv->on('Finish', array($this, 'onFinish'));
$this->serv->start();
}

public function onReceive($serv, $fd, $from_id, $data){


$result = $this->serv->taskwait($data);
if ($result !== false) {
$result=json_decode($result,true);
if ($result['status'] == 'OK') {
$this->serv->send($fd, json_encode($result['data']) . "\n");
} else {
$this->serv->send($fd, $result);
}
return;
} else {
$this->serv->send($fd, "Error. Task timeout\n");
}
}

public function onTask($serv, $task_id, $from_id, $sql){

static $link = null;
HELL:
if ($link == null) {
$link = @mysqli_connect("127.0.0.1", "root", "wdlinux.cn", "test");
if (!$link) {
$link = null;
$this->serv->finish("ER:" . mysqli_error($link));
return;
}
}
$result = $link->query($sql);

if (!$result) { //如果查询失败了
if(in_array(mysqli_errno($link), [2013, 2006])){//错误码为2013,或者2006,则重连数据库,重新执行sql
$link = null;
goto HELL;
}else{
$this->serv->finish("ER:" . mysqli_error($link));
return;
}
}

if(preg_match("/^select/i", $sql)){//如果是select操作,就返回关联数组
$data = array();

while ($fetchResult = mysqli_fetch_assoc($result) ){
$data['data'][]=$fetchResult;
}
}else{//否则直接返回结果
$data['data'] = $result;
}

$data['status']="OK";


$this->serv->finish(json_encode($data));


}

public function onFinish($serv, $task_id, $data){
echo "任务完成";//taskwait 不触发这个函数。。
}


}

$serv=new server_db_pool();
$serv->run();
----------------------------下边为客户端请求数据代码以及结果---------------------------- $client = new \swoole_client(SWOOLE_SOCK_TCP);
$num=rand(111111,999999);
$rts=$client->connect('127.0.0.1', 9508, 10) or die("连接失败");//链接mysql客户端


$sql =("select * from zdk_test");
$client->send($sql);
$resdata = $client->recv();


$resda=json_decode($resdata,true);
$client->close();


return json_encode($resda);



评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
凌晨123
积分:507 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /