Swoole addProcess的使用

addProcess函数 是添加一个用户自定义的工作进程。这个有什么用呢?服务在启动后,可以用于监控、上报或者其他特殊的任务。

注意这个添加的进程是被manager进程管理的。如果这个添加的用户进程经常exit的话,会不断的被manager拉起。所以这个用户进程需要守护,最简单就是让它是一个死循环,不让它频繁退出。

现在写一个测试脚本。作用是创建一个用户进程,可以获取当前服务的一些状态,比如得到当前Server的活动TCP连接数,启动时间,accpet/close的总次数等信息。

<?php
//演示添加一个进程,然后接受信息,获取当前服务端有多少连接数
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501);

//监听连接进入事件
$serv->on('connect', function ($serv, $fd) {
    echo "Client: Connect.
";
});

$globServiceProcess = new swoole_process(function($process) use ($serv) {
    while (true) {
        $msg = $process->read();
        $msg = json_decode($msg,true);
        $statsArr = $serv->stats();
        //发回给当前请求的用户
        if(isset($msg['command'])){
            $sendMsg = $statsArr[$msg['command']]??"无效指令";
            $serv->send($msg['fd'],sprintf("连接fd=%d:结果=%s".PHP_EOL,$msg['fd'],$sendMsg));
        }
    }
});

$serv->addProcess($globServiceProcess);

//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) use($globServiceProcess) {
    if($data){
        $data = trim($data);
        echo '通过管道发送给globServiceProcess指令,获取内容'.PHP_EOL;
        //发送的内容长度在Linux系统下最大不超过8K
        $globServiceProcess->write(json_encode(['command'=>$data,'fd'=>$fd]));
        echo json_encode(['command'=>$data,'fd'=>$fd]);
    }
    $serv->send($fd, "Server: ".$data.PHP_EOL);
});

//监听连接关闭事件
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.
";
});

//启动服务器
$serv->start();

在cli端启动服务。

然后telnet访问,先多开几个telnet,加大连接数

原文地址:https://www.cnblogs.com/gavinjunftd/p/9522708.html