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

问题的提出:
昨天用脚本模拟客户端登陆在线。 使用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测试, 排除不必要的干扰, 就最好了


已邀请:

walkor

赞同来自: 蓝天lucky

可以用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();

timfeng

赞同来自:

好的, 谢谢

walkor

赞同来自:

不客气

tem033 - hello world

赞同来自:

workerman果然牛逼,受教了

chen - 啦啦啦

赞同来自:

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

walkor

赞同来自:

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

yangws

赞同来自:

怎么观察

要回复问题请先登录注册