zoukankan      html  css  js  c++  java
  • 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,加大连接数

  • 相关阅读:
    JQuery中的动画
    javascript之变量、作用域、作用域链
    正确理解javascript的this关键字
    我忽略了的DOCTYPE!
    JQuery中的DOM操作
    发布一款html5移动端scroll框架:xScroll
    在debug时使Flutter中的print打印json数据时更美观易读
    使用ValueListenableBuilder监听TextEditingController
    Flutter使用rxdart和ChangeNotifier实现的倒计时按钮
    Flutter设计一个长按自动步进的按钮
  • 原文地址:https://www.cnblogs.com/gavinjunftd/p/9522708.html
Copyright © 2011-2022 走看看