Ou allez directement sur le 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();
Recommandé (gratuit) : swoole
Utilisez l'accès au serveur de navigation. http://ip:9501
MySQL asynchrone n'a pas besoin d'attendre que la première requête soit terminée avant d'exécuter la deuxième requête. L'effet est plus évident lors de l'accès à différents serveurs, différentes bases de données et différentes tables.
Comparez le code de requête MySQL synchrone :
<?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();
Le code synchrone utilise la méthode native PHP pour interroger les données.
Mettez deux méthodes de requête sur le test de performances en utilisant ab :
ab -c 100 -n 1000 http://127.0.0.1:9501/
Requête asynchrone :
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)
Requête synchrone :
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)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!