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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章