Heim  >  Artikel  >  Backend-Entwicklung  >  Codebeispiel für eine PHP-Multiprozess-Verarbeitung einer TCP-Verbindung

Codebeispiel für eine PHP-Multiprozess-Verarbeitung einer TCP-Verbindung

不言
不言nach vorne
2018-11-24 15:45:362267Durchsuche

Dieser Artikel bietet Ihnen ein Codebeispiel für die PHP-Mehrprozessverarbeitung von TCP-Verbindungen. Ich hoffe, dass er Ihnen als Referenz dienen wird.

Der Code lautet wie folgt:

<?php
if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0)
{
        echo "failed to create socket: ".socket_strerror($sock)."\n";
        exit();
}
if(($ret = socket_bind($sock,&#39;127.0.0.1&#39;, 8888)) < 0)
{
        echo "failed to bind socket: ".socket_strerror($ret)."\n";
        exit();
}
if( ( $ret = socket_listen( $sock, 0 ) ) < 0 ) 
{
        echo "failed to listen to socket: ".socket_strerror($ret)."\n";
        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);
        }   
}

Jede Verbindung entspricht einem Prozess, ähnlich dem Perwork-Modus von Apache

Erklärung des PHP-Multiprozesses

<?php

$pid = pcntl_fork();
//父进程和子进程都会执行下面代码
if ($pid == -1) {
    //错误处理:创建子进程失败时返回-1.
     die(&#39;could not fork&#39;);
} else if ($pid) {
     //父进程会得到子进程号,所以这里是父进程执行的逻辑
     pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
} else {
     //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
}
?>

Das obige ist der detaillierte Inhalt vonCodebeispiel für eine PHP-Multiprozess-Verarbeitung einer TCP-Verbindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen