Home >PHP Framework >Swoole >Explain asynchronous MySQL in swoole HTTP server
Or go directly to the code:
<?php$http = new swoole_http_server("0.0.0.0", 9501);$http->on('request', function($request, $response){ $swoole_mysql1 = new Swoole\Coroutine\MySQL(); $swoole_mysql2 = new Swoole\Coroutine\MySQL(); $swoole_mysql1->connect([ 'host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'password' => 'root', 'database' => 'swoole', ]); $swoole_mysql2->connect([ 'host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'password' => 'root', 'database' => 'swoole', ]); $res1 = $swoole_mysql1->query('SELECT * FROM data1'); $res2 = $swoole_mysql2->query('SELECT * FROM data2'); $response->header("Content-Type", "text/html; charset=utf-8"); $response->end("<h1>Hello Swoole. #".count($res1).count($res2)."</h1>"); });$http->start();
Recommended (free): swoole
## Use browse server access. http://ip:9501 Asynchronous MySQL does not need to wait for the first query to be completed before executing the second query. The effect is more obvious when accessing different servers, different databases, and different tables.
Compare the synchronous MySQL query code:
<?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->query('SELECT * FROM data1'); $res2 = $swoole_mysql2->query('SELECT * FROM data2'); $response->header("Content-Type", "text/html; charset=utf-8"); $response->end("<h1>Hello Swoole. #".$res1->num_rows.$res2->num_rows."</h1>"); });$http->start();The synchronization code uses PHP native method to query data.
Put the performance test using ab for two query methods:
ab -c 100 -n 1000 http://127.0.0.1:9501/
Asynchronous query:
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)Synchronous query:
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 above is the detailed content of Explain asynchronous MySQL in swoole HTTP server. For more information, please follow other related articles on the PHP Chinese website!