关于压力测试,能否给解答下。。。小白

zcz66341631
require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
use Workerman\Connection\AsyncTcpConnection;

$worker = new Worker();
$worker->onWorkerStart = 'connect';
function connect(){
    static $count = 0;
    echo $count . "\n";
    if ($count++ >= 10000) return;
    // 建立异步链接
    $con = new AsyncTcpConnection('ws://127.0.0.1:7272');
    $con->onConnect = function($con) {
        // 递归调用connect
        connect();
    };
    $con->onMessage = function($con, $msg) {
        $msgInfo = json_decode($msg, true);
        if(isset($msgInfo['type']) && $msgInfo['type'] == 'ping'){
            $con->send('{"type":"pong"}');
        }
        echo "r $msg\n";
    };
    $con->onClose = function($con) {
        echo "con close\n";
    };

    Timer::add(5, function()use($con){
        $con->send('{"type":"pong"}');
    });
    $con->connect();
    echo $count, " connections complete\n";
}
Worker::runAll();

这个是如何测试的啊?先在自己服务器下 start了,发现就跑一遍啊。。。真是个小白,求解答

阅读 748
1个回答

blogdaren

7272端口对应的服务启动成功了吗? 连接姿势正确了吗? 从代码上看似乎只有一种解释就是:
tcp连接并没有建立成功,导致后续无法递归调用connect(),所以看上去只跑了一遍,而且还是无效的TCP通信。

  • zcz66341631 2020-05-27

    其实我压根就没整明白,这个测试文件是在什么基础上运行的。我是先在命令行开start.php吗?是开守护吗?还是不用开start.php,直接php 这个测试文件啊。。

  • blogdaren 2020-05-27

    1、假如7272端口对应的启动服务脚本为 start1.php , 那么先启动: php start1.php start
    2、假如压测启动脚本为start2.php【就是你上面贴的这个代码】,那么继续启动:php start2.php start
    完事儿~~

  • zcz66341631 2020-05-27

    tcp root ChatGateway websocket://0.0.0.0:7272 4 已经开启了

    php test.php start
    没反应了。。。

  • blogdaren 2020-05-27

    怎么个没反应法?

  • zcz66341631 2020-05-27

    php start.php start -d
    开启成功后
    php test.php start
    这样开始跑了
    count我设置的是10000
    但跑到1022 就不动了,这崩了吗

  • blogdaren 2020-05-27

    1、这不是崩了哈,
    2、逆推出使用的是默认select事件机制【自己php start.php status确认下】,select 最大只支持1024个连接,按照手册优化linux内核,然后安装event扩展,缺一不可,看手册很重要。

  • zcz66341631 2020-05-27

    OK,感谢老铁的耐心指导,一般人真不愿意搭理我

  • blogdaren 2020-05-27

    不客气,希望对你有所帮助。