0

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

请前辈们指点,这个量级有问题吗?

感谢!

新亮 1.7k
2019-06-05 提问

查看全部 2 个回答

0

对,使用协程 和 协程 websocket 客户端进行压测。性能可以进行优化,建议关闭 websocket_mask ,这个比较耗费 CPU

你的机器本身只有 1 核,还要同时运行客户端和服务器端,1万 QPS 已经非常好了。

推广链接