php swoole异步处理mysql

php swoole异步处理mysql

//创建websocket服务器对象,监听0.0.0.0:9509端口
//异步测试
$ws = new swoole_websocket_server("0.0.0.0", 9600);

$ws->set(array(
    'worker_num' => 1,
    'max_conn' => 65535,
    /*'daemonize' => true,*/
    'backlog' => 128,
    'task_worker_num' => 1,
));

//监听WebSocket连接打开事件
$ws->on('open', function ($ws, $request) {

});

/* $tag 1 初始化玩家信息 */
//监听WebSocket消息事件
$ws->on('message', function ($ws, $frame) {

});



//定时器要写在WorkerStart这个里面哦
$ws->on('WorkerStart', function ($serv, $worker_id) {
    //投递异步任务
    $data=array('wef'=>'wefe');

    $task_id = $serv->task($data);
    echo "Dispath AsyncTask: id=$task_id\n";

    /*执行其他操作*/
    echo'lalalalalalal';
});

/*通用的执行*/
function commonexecute($sql, $zhanwei = '', $isdebug = 0)
{
    try {
        $stmt = \Db::getStmt($sql);
        if (empty($zhanwei)) {
            $isok=$stmt->execute();
        } else {
            $isok=$stmt->execute($zhanwei);
        }
        if ($isdebug) {
            getrepairsql($sql, $zhanwei);
        }
    } catch (\PDOException $e) {
        $errorstr1='mysql语句错误1:'.$e->getMessage().PHP_EOL;
        $errorstr2='mysql语句错误2:'.$sql.PHP_EOL;
        echo $errorstr1;
        echo'
'; echo $errorstr2; file_put_contents(__DIR__.'/error.log', date("Y-m-d H:i:s"). " " . $errorstr1.PHP_EOL, FILE_APPEND | LOCK_EX); file_put_contents(__DIR__.'/error.log', date("Y-m-d H:i:s"). " " . $errorstr2.PHP_EOL, FILE_APPEND | LOCK_EX); exit(); } return $isok; } //处理异步任务 $ws->on('task', function ($serv, $task_id, $from_id, $data) { echo "New AsyncTask[id=$task_id]".PHP_EOL; var_dump($data); $sql='select SLEEP(6)'; $isok=commonexecute($sql); //返回任务执行的结果 $serv->finish("$data -> OK"); }); //处理异步任务的结果 $ws->on('finish', function ($serv, $task_id, $data) { echo "AsyncTask[$task_id] Finish: $data".PHP_EOL; }); //监听WebSocket连接关闭事件 $ws->on('close', function ($ws, $fd) { }); $ws->start();
可以看出了执行sleep sql语句时候并有堵塞线程

查看原文:http://newmiracle.cn/?p=2154
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值