講解swoole HTTP服務器中異步MySQL

講解swoole HTTP服務器中異步MySQL

還是直接上代碼:

<?php $http = new swoole_http_server("0.0.0.0", 9501);$http->on('request',?function($request,?$response){ ????$swoole_mysql1?=?new?SwooleCoroutineMySQL();????$swoole_mysql2?=?new?SwooleCoroutineMySQL();????$swoole_mysql1-&gt;connect([????????'host'?=&gt;?'127.0.0.1',????????'port'?=&gt;?3306,????????'user'?=&gt;?'root',????????'password'?=&gt;?'root',????????'database'?=&gt;?'swoole', ????]);????$swoole_mysql2-&gt;connect([????????'host'?=&gt;?'127.0.0.1',????????'port'?=&gt;?3306,????????'user'?=&gt;?'root',????????'password'?=&gt;?'root',????????'database'?=&gt;?'swoole', ????]);????$res1?=?$swoole_mysql1-&gt;query('SELECT?*?FROM?data1');????$res2?=?$swoole_mysql2-&gt;query('SELECT?*?FROM?data2');????$response-&gt;header("Content-Type",?"text/html;?charset=utf-8");????$response-&gt;end("<h1>Hello?Swoole.?#".count($res1).count($res2)."</h1>");  });$http-&gt;start();

推薦(免費):swoole

使用瀏覽器訪問。http://ip:9501
異步MySQL可以不需要等待第一條查詢完成后再執(zhí)行第二條,在訪問不同服務器,不同數(shù)據(jù)庫,不同的表時效果比較明顯。
對比同步MySQL查詢代碼:

<?php $http = new swoole_http_server("0.0.0.0", 9501);$http->on('request',?function($request,?$response){????$swoole_mysql1?=?mysqli_connect('127.0.0.1',?'root',?'root',?'swoole',?3306);????$swoole_mysql2?=?mysqli_connect('127.0.0.1',?'root',?'root',?'swoole',?3306);????$res1?=?$swoole_mysql1-&gt;query('SELECT?*?FROM?data1');????$res2?=?$swoole_mysql2-&gt;query('SELECT?*?FROM?data2');????$response-&gt;header("Content-Type",?"text/html;?charset=utf-8");????$response-&gt;end("<h1>Hello?Swoole.?#".$res1-&gt;num_rows.$res2-&gt;num_rows."</h1>");  });$http-&gt;start();

同步代碼使用PHP原生方式查詢數(shù)據(jù)。
放上兩種查詢方式的使用ab進行的性能測試:
ab -c 100 -n 1000 http://127.0.0.1:9501/
異步查詢:

Server?Software:????????swoole-http-server Server?Hostname:????????127.0.0.1Server?Port:????????????9501Document?Path:??????????/ Document?Length:????????30?bytesConcurrency?Level:??????100Time?taken?for?tests:???1.477?secondsComplete?requests:??????1000Failed?requests:????????0Write?errors:???????????0Total?transferred:??????193000?bytesHTML?transferred:???????30000?bytesRequests?per?second:????676.82?[#/sec]?(mean)Time?per?request:???????147.749?[ms]?(mean) Time?per?request:???????1.477?[ms]?(mean,?across?all?concurrent?requests) Transfer?rate:??????????127.57?[Kbytes/sec]?received  Connection?Times?(ms)??????????????min??mean[+/-sd]?median???maxConnect:????????0????1???1.8??????0???????7Processing:?????4??140??24.0????145?????156Waiting:????????0??140??24.1????145?????156Total:??????????7??140??22.6????145?????160Percentage?of?the?requests?served?within?a?certain?time?(ms)??50%????145 ??66%????146 ??75%????148 ??80%????148 ??90%????150 ??95%????152 ??98%????153 ??99%????154 ?100%????160?(longest?request)

同步查詢:

Server?Software:????????swoole-http-server Server?Hostname:????????127.0.0.1Server?Port:????????????9501Document?Path:??????????/ Document?Length:????????30?bytesConcurrency?Level:??????100Time?taken?for?tests:???2.765?secondsComplete?requests:??????1000Failed?requests:????????0Write?errors:???????????0Total?transferred:??????193000?bytesHTML?transferred:???????30000?bytesRequests?per?second:????361.67?[#/sec]?(mean)Time?per?request:???????276.493?[ms]?(mean) Time?per?request:???????2.765?[ms]?(mean,?across?all?concurrent?requests) Transfer?rate:??????????68.17?[Kbytes/sec]?received  Connection?Times?(ms)??????????????min??mean[+/-sd]?median???maxConnect:????????0????0???0.4??????0???????2Processing:?????4??262??48.5????272?????295Waiting:????????4??262??48.5????272?????295Total:??????????6??262??48.2????272?????295Percentage?of?the?requests?served?within?a?certain?time?(ms)??50%????272 ??66%????278 ??75%????281 ??80%????284 ??90%????287 ??95%????291 ??98%????293 ??99%????294 ?100%????295?(longest?request)

以上就是講解

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享