zoukankan      html  css  js  c++  java
  • [PHP] PHP多进程处理tcp连接

    <?php
    if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0)
    {
            echo "failed to create socket: ".socket_strerror($sock)."
    ";
            exit();
    }
    
    if(($ret = socket_bind($sock,'127.0.0.1', 8888)) < 0)
    {
            echo "failed to bind socket: ".socket_strerror($ret)."
    ";
            exit();
    }
    
    if( ( $ret = socket_listen( $sock, 0 ) ) < 0 ) 
    {
            echo "failed to listen to socket: ".socket_strerror($ret)."
    ";
            exit();
    }
    
    while (true)
    {
            $conn = @socket_accept($sock);
    
            //子进程
            if(pcntl_fork() == 0)
            {   
                    $recv = socket_read($conn, 8192);
                    //处理数据
                    $send_data = "server: ".$recv;
                    socket_write($conn, $send_data);
                    socket_close($conn);
                    exit(0);
            }   
            else
            {   
                    socket_close($conn);
            }   
    }

    每一个连接对应一个进程,类似apache的perwork模式

    php多进程的解释

    <?php
    
    $pid = pcntl_fork();
    //父进程和子进程都会执行下面代码
    if ($pid == -1) {
        //错误处理:创建子进程失败时返回-1.
         die('could not fork');
    } else if ($pid) {
         //父进程会得到子进程号,所以这里是父进程执行的逻辑
         pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
    } else {
         //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
    }
    ?>
  • 相关阅读:
    libPods.a 无法找到的解决方法
    Mac 必备软件 Quicksilver
    Mac玩老游戏DOOM II
    [转载]The Island Castaway mac版解锁
    看了不到一半同事上培训班时候的示例代码,解决了很多前几个月遇到的问题。
    8月16日 layui使用
    8月14日
    8月13日
    8月12日
    8月9日
  • 原文地址:https://www.cnblogs.com/taoshihan/p/9985764.html
Copyright © 2011-2022 走看看