1. <tfoot id='kgfs0'></tfoot>
        <bdo id='kgfs0'></bdo><ul id='kgfs0'></ul>

    2. <small id='kgfs0'></small><noframes id='kgfs0'>

      <legend id='kgfs0'><style id='kgfs0'><dir id='kgfs0'><q id='kgfs0'></q></dir></style></legend>

    3. <i id='kgfs0'><tr id='kgfs0'><dt id='kgfs0'><q id='kgfs0'><span id='kgfs0'><b id='kgfs0'><form id='kgfs0'><ins id='kgfs0'></ins><ul id='kgfs0'></ul><sub id='kgfs0'></sub></form><legend id='kgfs0'></legend><bdo id='kgfs0'><pre id='kgfs0'><center id='kgfs0'></center></pre></bdo></b><th id='kgfs0'></th></span></q></dt></tr></i><div id='kgfs0'><tfoot id='kgfs0'></tfoot><dl id='kgfs0'><fieldset id='kgfs0'></fieldset></dl></div>

      PHP 守护进程/worker 环境

      时间:2023-11-30

          • <tfoot id='MDQZf'></tfoot>
              <tbody id='MDQZf'></tbody>

            <small id='MDQZf'></small><noframes id='MDQZf'>

            <i id='MDQZf'><tr id='MDQZf'><dt id='MDQZf'><q id='MDQZf'><span id='MDQZf'><b id='MDQZf'><form id='MDQZf'><ins id='MDQZf'></ins><ul id='MDQZf'></ul><sub id='MDQZf'></sub></form><legend id='MDQZf'></legend><bdo id='MDQZf'><pre id='MDQZf'><center id='MDQZf'></center></pre></bdo></b><th id='MDQZf'></th></span></q></dt></tr></i><div id='MDQZf'><tfoot id='MDQZf'></tfoot><dl id='MDQZf'><fieldset id='MDQZf'></fieldset></dl></div>
            • <legend id='MDQZf'><style id='MDQZf'><dir id='MDQZf'><q id='MDQZf'></q></dir></style></legend>

                <bdo id='MDQZf'></bdo><ul id='MDQZf'></ul>

                本文介绍了PHP 守护进程/worker 环境的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                问题:我想实现几个 php-worker 进程,它们在 MQ-server 队列上侦听异步作业.现在的问题是,简单地将这些进程作为服务器上的守护进程运行并不能真正让我对实例进行任何级别的控制(负载、状态、锁定)......除了转储 ps -aux 之外.因此,我正在寻找某种运行时环境,让我可以在系统(进程)级别或更高层(某种 Java 风格的应用服务器)上监视和控制实例

                Problem: I want to implement several php-worker processes who are listening on a MQ-server queue for asynchronous jobs. The problem now is that simply running this processes as daemons on a server doesn't really give me any level of control over the instances (Load, Status, locked up)...except maybe for dumping ps -aux. Because of that I'm looking for a runtime environment of some kind that lets me monitor and control the instances, either on system (process) level or on a higher layer (some kind of Java-style appserver)

                任何指针?

                推荐答案

                这里有一些可能有用的代码.

                Here's some code that may be useful.

                <?
                define('WANT_PROCESSORS', 5);
                define('PROCESSOR_EXECUTABLE', '/path/to/your/processor');
                set_time_limit(0);
                $cycles = 0;
                $run = true;
                $reload = false;
                declare(ticks = 30);
                
                function signal_handler($signal) {
                    switch($signal) {
                    case SIGTERM :
                        global $run;
                        $run = false;
                        break;
                    case SIGHUP  :
                        global $reload;
                        $reload = true;
                        break;
                    }   
                }
                
                pcntl_signal(SIGTERM, 'signal_handler');
                pcntl_signal(SIGHUP, 'signal_handler');
                
                function spawn_processor() {
                    $pid = pcntl_fork();
                    if($pid) {
                        global $processors;
                        $processors[] = $pid;
                    } else {
                        if(posix_setsid() == -1)
                            die("Forked process could not detach from terminal
                ");
                        fclose(stdin);
                        fclose(stdout);
                        fclose(stderr);
                        pcntl_exec(PROCESSOR_EXECUTABLE);
                        die('Failed to fork ' . PROCESSOR_EXECUTABLE . "
                ");
                    }
                }
                
                function spawn_processors() {
                    global $processors;
                    if($processors)
                        kill_processors();
                    $processors = array();
                    for($ix = 0; $ix < WANT_PROCESSORS; $ix++)
                        spawn_processor();
                }
                
                function kill_processors() {
                    global $processors;
                    foreach($processors as $processor)
                        posix_kill($processor, SIGTERM);
                    foreach($processors as $processor)
                        pcntl_waitpid($processor);
                    unset($processors);
                }
                
                function check_processors() {
                    global $processors;
                    $valid = array();
                    foreach($processors as $processor) {
                        pcntl_waitpid($processor, $status, WNOHANG);
                        if(posix_getsid($processor))
                            $valid[] = $processor;
                    }
                    $processors = $valid;
                    if(count($processors) > WANT_PROCESSORS) {
                        for($ix = count($processors) - 1; $ix >= WANT_PROCESSORS; $ix--)
                            posix_kill($processors[$ix], SIGTERM);
                        for($ix = count($processors) - 1; $ix >= WANT_PROCESSORS; $ix--)
                            pcntl_waitpid($processors[$ix]);
                    } elseif(count($processors) < WANT_PROCESSORS) {
                        for($ix = count($processors); $ix < WANT_PROCESSORS; $ix++)
                            spawn_processor();
                    }
                }
                
                spawn_processors();
                
                while($run) {
                    $cycles++;
                    if($reload) {
                        $reload = false;
                        kill_processors();
                        spawn_processors();
                    } else {
                        check_processors();
                    }
                    usleep(150000);
                }
                kill_processors();
                pcntl_wait();
                ?>
                

                这篇关于PHP 守护进程/worker 环境的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:PHP如何将标题位置定位到父目录中的页面? 下一篇:RabbitMQ 是否会在有消息时为消费者调用回调函数?

                相关文章

                <i id='TUJ1x'><tr id='TUJ1x'><dt id='TUJ1x'><q id='TUJ1x'><span id='TUJ1x'><b id='TUJ1x'><form id='TUJ1x'><ins id='TUJ1x'></ins><ul id='TUJ1x'></ul><sub id='TUJ1x'></sub></form><legend id='TUJ1x'></legend><bdo id='TUJ1x'><pre id='TUJ1x'><center id='TUJ1x'></center></pre></bdo></b><th id='TUJ1x'></th></span></q></dt></tr></i><div id='TUJ1x'><tfoot id='TUJ1x'></tfoot><dl id='TUJ1x'><fieldset id='TUJ1x'></fieldset></dl></div>

              • <small id='TUJ1x'></small><noframes id='TUJ1x'>

                  <tfoot id='TUJ1x'></tfoot>

                  • <bdo id='TUJ1x'></bdo><ul id='TUJ1x'></ul>
                  1. <legend id='TUJ1x'><style id='TUJ1x'><dir id='TUJ1x'><q id='TUJ1x'></q></dir></style></legend>