<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **MySQL連接池** 在傳統的網站開發中,比如LNMP模式,由Nginx的master進程接收請求然后分給多個worker進程,每個worker進程 再鏈接php-fpm的master進程,php-fpm再根據當前情況去調用其worker進程然后處理PHP,如果需要MySQL,在與MySQL建立連接,這個時候,如果有1000個請求打過來,就需要與MySQL建立1000個連接。如果請求達到萬級或者百萬級,這時數據庫的壓力就會非常大了。連接池技術就可以派上用場了,可以大大降低數據庫連接數,還可以降低IO消耗。 **為什么可以降低IO消耗?** MySQL短連接每次請求操作數據庫都需要建立與MySQL服務器建立TCP連接,這是需要時間開銷的。TCP連接需要3次網絡通信。這樣就增加了一定的延時和額外的IO消耗。請求結束后會關閉MySQL連接,還會發生3/4次網絡通信。 而連接池采用的是MySQL的長連接模式,會一直保持與MySQL的連接,重用連接進行MySQL的操作,從而節省了建立連接和斷開連接的消耗。 **用swoole實現一個簡單的MySQL連接池** ~~~ <?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/5/31 * Time: 10:13 */ $serv = new swoole_server('0.0.0.0', 9506); $serv->set(array( 'worker_num' => 50, //worker進程數量 'daemonize' => 0, 'task_worker_num' => 10, //task進程數量 即為維持的MySQL連接的數量 )); function my_onReceive($serv, $fd, $from_id, $data) { echo "收到數據".$data.PHP_EOL; //taskwait就是投遞一條任務,這里直接傳遞SQL語句了 //然后阻塞等待SQL完成,并返回結果 $result = $serv->taskwait($data); echo "任務結束".PHP_EOL; 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");//如果返回的是false,則說明taskwait等待超時,可以設置相應的等待超時時間 } } function my_onTask($serv, $task_id, $from_id, $sql) { echo "開始做任務 task id:".$task_id.PHP_EOL; static $link = null; HELL: if ($link == null) { $link = @mysqli_connect("120.78.77.147", "root", "hanshi2019@", "1901"); if (!$link) { $link = null; $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{ $serv->finish("ER:" . mysqli_error($link)); return; } } if(preg_match("/^select/i", $sql)){//如果是select操作,就返回關聯數組 $data = $result->fetch_assoc(); }else{//否則直接返回結果 $data = $result; } $serv->finish("OK:" . serialize($data));//調用finish方法,用于在task進程中通知worker進程,投遞的任務已完成 //return "OK:".serialize($data); } function my_onFinish($serv, $task_id, $data) { echo "任務完成";//taskwait 沒有觸發這個函數。。 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();//啟動server ~~~ **接下來,寫了個客戶端代碼來做測試** ~~~ $client = new swoole_client(SWOOLE_SOCK_TCP);//創建swoole tcp客戶端 $client->connect('127.0.0.1', 9506, 10) or die("連接失敗");//連接server while(true){ // echo "請輸出要執行的sql: "; // $sql = trim(fgets(STDIN)); $time = time(); $sql = "insert into test_c values('youyu',30,".$time.");"; if($sql=='exit'){ break; } $client->send($sql);//發送要執行的sql $data = $client->recv();//阻塞接受返回的結果 var_dump($data);//打印 sleep(2); } $client->close();//關閉連接 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看