# 性能测试
## 测试环境
CPU: Core i7-8550U CPU 1.80GHz
内存: 16G
## 测试命令
`ab -c 1000 -n 1000000 -k http://127.0.0.1:8081/`
## Warriorman
### 测试脚本
```
<?php
use Workerman\Worker;
use Workerman\Lib\Timer;
use WOrkerman\Db\MysqlPool;
require_once 'Workerman/Autoloader.php';
Warriorman\Worker::rename(); // 将Workerman改为Workerman
Warriorman\Runtime::enableCoroutine(); // hook相关函数
// 监听另外一个端口
$worker2 = new Worker("tcp://0.0.0.0:8081");
$worker2->count = 16;
$worker2->onMessage = function ($connection, $data) {
$responseStr = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Keep-Alive\r\nContent-Length: 11\r\n\r\nhello worlb\r\n";
$connection->send($responseStr);
};
Worker::runAll();
```
### 开始测试
```
root@WIN-20200727IKP:/mnt/c/Users/Administrator# ab -c 1000 -n 1000000 -k http://127.0.0.1:8081/
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests
Server Software:
Server Hostname: 127.0.0.1
Server Port: 8081
Document Path: /
Document Length: 13 bytes
Concurrency Level: 1000
Time taken for tests: 13.909 seconds
Complete requests: 1000000
Failed requests: 0
Keep-Alive requests: 1000000
Total transferred: 101000000 bytes
HTML transferred: 13000000 bytes
Requests per second: 71894.35 [#/sec] (mean)
Time per request: 13.909 [ms] (mean)
Time per request: 0.014 [ms] (mean, across all concurrent requests)
Transfer rate: 7091.14 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 4.5 0 264
Processing: 2 14 0.8 14 264
Waiting: 0 14 0.8 14 25
Total: 2 14 4.5 14 278
Percentage of the requests served within a certain time (ms)
50% 14
66% 14
75% 14
80% 14
90% 14
95% 15
98% 16
99% 17
100% 278 (longest request)
```
## Workerman
### 测试脚本
```
<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
$worker = new Worker('tcp://0.0.0.0:8081');
$worker->count = 16;
$worker->onMessage = function ($connection) {
$responseStr = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Keep-Alive\r\nContent-Length: 11\r\n\r\nhello world\r\n";
$connection->send($responseStr);
};
Worker::runAll();
```
### 开始测试
```
root@WIN-20200727IKP:/mnt/c/Users/Administrator# ab -c 1000 -n 1000000 -k http://127.0.0.1:8081/
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests
Server Software:
Server Hostname: 127.0.0.1
Server Port: 8081
Document Path: /
Document Length: 13 bytes
Concurrency Level: 1000
Time taken for tests: 27.099 seconds
Complete requests: 1000000
Failed requests: 0
Keep-Alive requests: 1000000
Total transferred: 101000000 bytes
HTML transferred: 13000000 bytes
Requests per second: 36902.22 [#/sec] (mean)
Time per request: 27.099 [ms] (mean)
Time per request: 0.027 [ms] (mean, across all concurrent requests)
Transfer rate: 3639.77 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.9 0 28
Processing: 3 27 4.3 30 65
Waiting: 3 27 4.3 30 65
Total: 3 27 4.3 30 71
Percentage of the requests served within a certain time (ms)
50% 30
66% 31
75% 31
80% 31
90% 32
95% 32
98% 32
99% 33
100% 71 (longest request)
```
### 结论
相较于Workerman确实提升较大,但是Warriorman每个进程占用的内存更高。
- 序言
- 启动停止
- 简单的开发示例
- 性能测试
- 性能测试-数据库
- 通讯协议
- Coroutine类
- create
- getCid
- yield
- resume
- sleep
- wait
- getTotalNum
- isExist
- defer
- Runtime类
- Worker类
- 构造函数
- 属性
- workerId
- id
- name
- protocol
- transport
- reusePort
- backlog
- connections
- stdoutFile
- pidFile
- logFile
- user
- reloadable
- daemonize
- globalEvent
- 回调属性
- onWorkerStart
- onWorkerReload
- onConnect
- onMessage
- onClose
- onBufferFull
- onBufferDrain
- onError
- 方法
- rename
- runAll
- stopAll
- listen
- TcpConnection类
- 属性
- id
- protocol
- worker
- maxSendBufferSize
- defaultMaxSendBufferSize
- defaultMaxPackageSize
- 方法
- set
- send
- getRemoteIp
- getRemotePort
- close
- destroy
- pauseRecv
- resumeRecv
- pipe
- Timer定时器类
- add
- del
- 定时器注意事项
- Channel类
- 构造方法
- push
- pop
- length
- isEmpty()