zoukankan      html  css  js  c++  java
  • swoole http_server 多进程并使用多进程处理消息

    <?php
    $http = new swoole_http_server("0.0.0.0", 9511);
    $http->set([
                     'worker_num' =>3, //工作进程数
                    'daemonize' => true, //是否后台运行
                ]);
    $http->on('request','Run');
    
    function Run($request, $response)
    {
        $url=$request->server['request_uri'];
        if($url!='/favicon.ico'){
            $m = [1,2,3,4,5,6,7,8,9];
            p($m);
        }
        $response->end('首页');
    }
    
    function p($messages)
    {
        $worker_num = 5;
        $process_pool = [];
    
        $process= null;
        $pid = posix_getpid();
        $customMsgKey = 1;
        $mod = 2 | swoole_process::IPC_NOWAIT;//这里设置消息队列为非阻塞模式
    
        for($i=0;$i<$worker_num; $i++) {
            $process=new swoole_process('sub_process');
            $process->useQueue($customMsgKey, $mod);
            $process->start();
            $pid = $process->pid;
            $process_pool[$pid] = $process;
        }
        //由于所有进程是共享使用一个消息队列,所以只需向一个子进程发送消息即可
        $process = current($process_pool);
        foreach ($messages as $msg) {
            $process->push($msg);
        }
    
    }
    
    
    function sub_process(swoole_process $worker)
    {
            sleep(1); //防止父进程还未往消息队列中加入内容直接退出
            // echo "worker ".$worker->pid." started".PHP_EOL;
            while($msg = $worker->pop()){
                echo $msg;
                if ($msg === false) {
                    break;
                }
                $sub_pid = $worker->pid;
                // echo "[$sub_pid] msg : $msg".PHP_EOL;
                file_put_contents(__DIR__.'/a.txt',"[$sub_pid] msg : $msg".PHP_EOL,FILE_APPEND);
                sleep(1);//这里的sleep模拟任务耗时,否则可能1个worker就把所有信息全接受了
            }
            // echo "worker ".$worker->pid." exit".PHP_EOL;
            $worker->exit(0);
    }
    
    $http->start();
  • 相关阅读:
    SDK manager打不开解决办法(转载)
    debian安装中文字体
    rtos之定时器实现
    rtos学习之支持多优先级
    RT-Thread 的空闲线程和阻塞延时
    RT-Thread之对象容器
    RT-Thread 之临界段保护
    RT-Thread之线程实现就绪列表
    rtos 学习之链表
    RTOS 的学习之创建线程
  • 原文地址:https://www.cnblogs.com/heijinli/p/11293843.html
Copyright © 2011-2022 走看看