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了,发现就跑一遍啊。。。真是个小白,求解答
7272端口对应的服务启动成功了吗? 连接姿势正确了吗? 从代码上看似乎只有一种解释就是:
tcp连接并没有建立成功,导致后续无法递归调用connect(),所以看上去只跑了一遍,而且还是无效的TCP通信。
其实我压根就没整明白,这个测试文件是在什么基础上运行的。我是先在命令行开start.php吗?是开守护吗?还是不用开start.php,直接php 这个测试文件啊。。
1、假如7272端口对应的启动服务脚本为 start1.php , 那么先启动: php start1.php start
2、假如压测启动脚本为start2.php【就是你上面贴的这个代码】,那么继续启动:php start2.php start
完事儿~~
tcp root ChatGateway websocket://0.0.0.0:7272 4 已经开启了
再
php test.php start
没反应了。。。
怎么个没反应法?
php start.php start -d
开启成功后
php test.php start
这样开始跑了
count我设置的是10000
但跑到1022 就不动了,这崩了吗
1、这不是崩了哈,
2、逆推出使用的是默认select事件机制【自己php start.php status确认下】,select 最大只支持1024个连接,按照手册优化linux内核,然后安装event扩展,缺一不可,看手册很重要。
OK,感谢老铁的耐心指导,一般人真不愿意搭理我
不客气,希望对你有所帮助。