Swoole addProcess的使用

  • 1,482

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.\n";
});

$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.\n";
});

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


?>

在cli端启动服务。
然后telnet访问,先多开几个telnet,加大连接数

[root@VM_0_3_centos think.com]# php process.php
Client: Connect.
通过管道发送给globServiceProcess指令,获取内容
{"command":"cp","fd":2}通过管道发送给globServiceProcess指令,获取内容
{"command":"connection_num","fd":2}Client: Close.
[root@VM_0_3_centos think.com]# telnet 127.0.0.1 9501
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
cp
Server: cp
连接fd=2:结果=无效指令
connection_num
Server: connection_num
连接fd=2:结果=1
^]
telnet> quit
Connection closed.

weinxin
我的微信
这是我的微信扫一扫
开拓者博主
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:2   其中:访客  2   博主  0
    • 今日新闻 今日新闻 1

      文章不错非常喜欢

      • 今日头条新闻 今日头条新闻 2

        文章非常好超喜欢