国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

仿照workerman寫了個最簡單的tcp server,但不知道該怎么處理客戶端關(guān)閉連接時的情況

星際爭霸小王子
<?php      
    main();
    function main()
    {      

        $pid=pcntl_fork();
        if($pid)
        {
            exit(0);
        }
        else
        {
            posix_setsid();
            $pid=pcntl_fork();
            if($pid)
            {
                exit(0);
            } 
            cli_set_process_title('mysocket');               
            $stream_rs=stream_socket_server("tcp://127.0.0.1:2345",$errno,$errstr);
            $socket   = socket_import_stream($stream_rs);
            socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1);
            socket_set_option($socket, SOL_SOCKET, TCP_NODELAY, 1);
            stream_set_blocking($stream_rs, 0);
            //fork 2 subprocess
            $i=2;
            while($i--)
            {
                $pid=pcntl_fork();   
                if($pid)
                { 
                }
                else
                {                   
                    cli_set_process_title('submysocket');                   
                    $base_event=event_base_new();
                    $event=event_new();  
                    event_set($event, $stream_rs, EV_READ | EV_PERSIST , "acceptConnection", null);
                    event_base_set($event, $base_event);
                    event_add($event);
                    event_base_loop($base_event); 
                }
            }  
            $pid=pcntl_wait($stats); 
            echo $pid."has exit \n";
        }
    }

    function acceptConnection($socket)
    {        
        $new_stream = @stream_socket_accept($socket, 0); 
        if($new_stream===false)
        {
            return;
        }
        echo 'coming..';          
        stream_set_blocking($new_stream, 0);
        $base_event=event_base_new();
        $event=event_new();  
        event_set($event, $new_stream, EV_READ | EV_PERSIST , "baseRead", null);
        event_base_set($event, $base_event);
        event_add($event);
        event_base_loop($base_event);        
    }
    function baseRead($socket)
    {       
        $buf='';
        $buf_length=8192;
        while($str=fread($socket, $buf_length))
        {
            $buf.=$str;
        }
        myecho($buf);

    }
    function myecho($str)
    {
        if (!empty($str))
            echo $str;
    }
?>

以上是所有源代碼,我的客戶端是telnet 127.0.0.1 2345,但是現(xiàn)在的問題是worker進(jìn)程不知道客戶端退出了,還在傻傻地等,所以想請教群主怎么修改這段代碼

7057 3 0
3個回答

walkor 打賞
function baseRead($socket)
{
    if(feof($socket))
    {
        ..............
    }
    $buf='';
    $buf_length=8192;
    while($str=fread($socket, $buf_length))
    {
        $buf.=$str;
    }
    myecho($buf);
}
  • 暫無評論

謝謝boss

  • 暫無評論

我還有問題!
1. 我覺得我這個代碼在event上有問題?,F(xiàn)在的情況是,我只開了一個worker ,一旦telnet連接上服務(wù)器了,再開一個telnet的話,新開的就不會到acceptConnection函數(shù)里面去.
2.

if(feof($socket))
{
    unset($socket);         
    return;
}

這樣寫有什么問題嗎?

還請多多指教!

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??