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