Swoole 版本:4.3
对 swoole_websocket_server 压测时,使用这个方法可行吗?
//代码片段
$this->concurrency = 100;
$this->request = 100000;
go(function () {
for ($c = $this->concurrency; $c--;) {
$cli = new \Swoole\Coroutine\Http\Client('127.0.0.1', 9501);
$ret = $cli->upgrade('/');
if ($ret) {
while ($this->requested < $this->request) {
$this->push($cli);
$cli->recv();
}
}
}
});
官方使用的 swoole_http_client 在 4.3 版本移除了。
另外:
使用 Task 或 不使用 Task,压测时会有很大区别吗,目前本地测着区别不大,是这样的吗?
//使用 Task 代码
$this->serv->on('message', function ($serv, $frame) {
$serv->task($frame->data);
});
$this->serv->on('task', function ($serv, $task) {
foreach ($serv->connections as $fd) {
$connectionInfo = $serv->connection_info($fd);
if (isset($connectionInfo['websocket_status']) && intval($connectionInfo['websocket_status']) == 3) {
$serv->push($fd, $task->data);
}
}
});
//未使用Task代码
$this->serv->on('message', function ($server, $frame) {
foreach ($this->serv->connections as $fd) {
$connectionInfo = $this->serv->connection_info($fd);
if (isset($connectionInfo['websocket_status']) && intval($connectionInfo['websocket_status']) == 3) {
$server->push($fd, $frame->data);
}
}
});
机器信息
Mac 上安装的 Parallels Desktop 虚拟机
系统:Ubuntu 16.04.3 LTS
内存:
- 数量:1
- 核数:2
CPU:
- 数量:1
- 大小:2G
Concurrency:100
Request num:100000
Success num:100000
Total time:8.9364
Request per second:11190
请前辈们指点,这个量级有问题吗?
感谢!
对,使用协程 和 协程 websocket 客户端进行压测。性能可以进行优化,建议关闭 websocket_mask ,这个比较耗费 CPU
你的机器本身只有 1 核,还要同时运行客户端和服务器端,1万 QPS 已经非常好了。