还是直接上代码:
$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("Hello Swoole. #"
.count($res1).count($res2)."");
});
$http->start();
使用浏览器访问。http://ip:9501
异步MySQL可以不需要等待第一条查询完成后再执行第二条,在访问不同服务器,不同数据库,不同的表时效果比较明显。
对比同步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->query('SELECT * FROM data1');
$res2 = $swoole_mysql2->query('SELECT * FROM data2');
$response->header("Content-Type", "text/html; charset=utf-8");
$response->end("Hello Swoole. #"
.$res1->num_rows.$res2->num_rows."");
});
$http->start();
同步代码使用PHP原生方式查询数据。
放上两种查询方式的使用ab进行的性能测试:
ab -c 100 -n 1000 http://127.0.0.1:9501/
异步查询:
Server Software: swoole-http-server
Server Hostname: 127.0.0.1
Server Port: 9501
Document Path: /
Document Length: 30 bytes
Concurrency Level: 100
Time taken for tests: 1.477 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 193000 bytes
HTML transferred: 30000 bytes
Requests 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 max
Connect: 0 1 1.8 0 7
Processing: 4 140 24.0 145 156
Waiting: 0 140 24.1 145 156
Total: 7 140 22.6 145 160
Percentage 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.1
Server Port: 9501
Document Path: /
Document Length: 30 bytes
Concurrency Level: 100
Time taken for tests: 2.765 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 193000 bytes
HTML transferred: 30000 bytes
Requests 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 max
Connect: 0 0 0.4 0 2
Processing: 4 262 48.5 272 295
Waiting: 4 262 48.5 272 295
Total: 6 262 48.2 272 295
Percentage 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)