如何使用PHP编写daemon process

kevin.Zhu 发布于:2013-1-16 15:27 分类:Php  有 13 人浏览,获得评论 0 条  

http://www.cnblogs.com/leoo2sk/archive/2011/11/09/write-daemon-with-php.html


<?php

 

//Accpet the http client request and generate response content.

//As a demo, this function just send "PHP HTTP Server" to client.

function handle_http_request($address, $port)

{

    $max_backlog = 16;

    $res_content = "HTTP/1.1 200 OK

Content-Length: 15

Content-Type: text/plain; charset=UTF-8

 

PHP HTTP Server";

    $res_len = strlen($res_content);

 

    //Create, bind and listen to socket

    if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === FALSE)

    {

        echo "Create socket failed!\n";

        exit;

    }   

 

    if((socket_bind($socket, $address, $port)) === FALSE)

    {

        echo "Bind socket failed!\n";

        exit;

    }

     

    if((socket_listen($socket, $max_backlog)) === FALSE)

    {

        echo "Listen to socket failed!\n";

        exit;

    }

 

    //Loop

    while(TRUE)

    {

        if(($accept_socket = socket_accept($socket)) === FALSE)

        {

            continue;

        }

        else

        {

            socket_write($accept_socket, $res_content, $res_len);   

            socket_close($accept_socket);

        }

    }

}

 

//Run as daemon process.

function run()

{

    if(($pid1 = pcntl_fork()) === 0)

    //First child process

    {

        posix_setsid(); //Set first child process as the session leader.

         

        if(($pid2 = pcntl_fork()) === 0)

        //Second child process, which run as daemon.

        {

            //Replaced with your own domain or address.

            handle_http_request('www.codinglabs.org', 9999); 

        }

        else

        {

            //First child process exit;

            exit;

        }

    }

    else

    {

        //Wait for first child process exit;

        pcntl_wait($status);

    }

}

 

//Entry point.

run();

 

?>