如何模拟压力测试gateway worker保持在线的能力? 能够用workman模拟?

timfeng

问题的提出:
昨天用脚本模拟客户端登陆在线。 使用C语言发送cjson等登陆以及ping/pong包。。服务器定义了每10秒会发一个ping包心跳。 然后使用脚本每秒循环一次调用这个客户端, 一共循环2000次。
发现在线的客户端到达2000左右, 经常会出现某些终端自动离线或者因为心跳超时被服务器踢掉的情况。
使用的是text的连接.

客户端脚本:

#!/bin/bash
clear
rm test.log

for((i=0;i<5000;i++))
do
echo $i >> ./test.log

./tcpclient 192.168.1.112 8282 1233 87987987 &

sleep 1

done

tcpclient主要做的就是发送json格式的pong回复..

不知道是不是我的客户端有问题.. 如果能够直接用workman测试, 排除不必要的干扰, 就最好了

阅读 8397
7个回答

walkor

可以用workerman来测试,排除客户端问题的干扰,以下是测试的demo。
127.0.0.1:8282 改成实际服务器ip和端口。
demo是text协议,如果是ws协议,就把text://127.0.0.1:8282改成ws://127.0.0.1:8282。

<?php
require __DIR__ . '/../Workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
use Workerman\Connection\AsyncTcpConnection;

$worker = new Worker();
$worker->onWorkerStart = 'connect';
function connect(){
    static $count = 0;
    // 2000个链接
    if ($count++ >= 2000) return;
    // 建立异步链接
    $con = new AsyncTcpConnection('text://127.0.0.1:8282');
    $con->onConnect = function($con) {
        // 递归调用connect
        connect();
    };
    $con->onMessage = function($con, $msg) {
        echo "recv $msg\n";
    };
    $con->onClose = function($con) {
        echo "con close\n";
    };
    // 当前链接每10秒发个心跳包
    Timer::add(10, function()use($con){
        $con->send("ping");
    });
    $con->connect();
    echo $count, " connections complete\n";
}
Worker::runAll();
  • hlswwhsbs 2018-04-28

    你好,请问怎么测试wss长连接

  • walkor 2018-05-02

    $con = new AsyncTcpConnection('text://127.0.0.1:8282');
    下面加一句
    $con->transport = 'ssl';
    手册:http://doc.workerman.net/315300

  • superchangme 2019-11-25

    我想问下这个压测是要再搞个新服务器测还是在原来的服务器上直接运行呢

timfeng

好的, 谢谢

  • 暂无评论
walkor

不客气

  • 暂无评论
tem033

workerman果然牛逼,受教了

  • 暂无评论
chen

求教 这个 是怎么 看结果的啊 谢谢

  • 暂无评论
walkor

就是你打算支持多少个客户端,每个客户端大概多久通讯一次。
例如上面的是2000个客户端,每个客户端10秒给服务端发送一个心跳包。
设置好后运行,看看有没有什么异常,cpu 内存这些

  • 暂无评论
yangws

怎么观察

  • 暂无评论