Usar PHP para construir un servicio asíncrono Swoole

Utilizados en el proyecto de PHP, pero debido a la larga tarea que consume tiempo, después de la presentación de la parte delantera, lo que necesita la respuesta asíncrona servidor. 

Servidor de forma asincrónica una variedad de programas, incluyendo MQ, fsocket, Swoole y así sucesivamente. (Recomendado aprendizaje: swoole video tutorial) 

Swoole usando lenguaje C pura proporciona asíncrono lenguaje multi-roscado servidor PHP, asíncrono, TCP cliente de red / UDP, asíncrono MySQL , asíncrono Redis, agrupación de conexiones de base de datos, AsyncTask, colas de mensajes, milisegundo temporizador una lectura asíncrona de archivos y escribir, las consultas DNS asíncronas. Swoole construido HTTP / WebSocket servidor / cliente, HTTP2. 0 del lado del servidor. 

Lo más importante es la ayuda perfecta para el lenguaje PHP. Por lo tanto Swoole utiliza para construir un servidor asíncrono proporciona una respuesta asíncrona, un empuje, una serie de tareas de trabajo programado. 

Swoole está escrito en lenguaje C, a modo de compilado e instalado. Hay dependencias instaladas:


 
PHP -5.3.10 o temprano 

gcc -4.4 o temprano 

la marca 

autoconf 

PCRE (CentOS sistema puede ejecutar el comando: yum install PCRE - devel) Instalación:


 
phpize # Si no existe el comando, añada delante el camino real de la php
 
./ Configurar de 

la marca

sudo make install 

después compilado, necesidad de PHP . Añadir ini extendieron 

Extensión = swoole. SO servidor de



 clase servidor { 

    Privada  $ Serv ; 

    pública  función de la __construct () { 

        $ al este -> Serv = nueva nueva swoole_server ( "0.0.0.0", 9501 ); 

        $ el este -> ser-> conjunto ( array ( 

            // . 'worker_num' => 1, 1-4 veces el conjunto normal de // el número de servidores de CPU
 
            . 'a demonizar '=> 1,   // ejecutar un daemon
 
            ' max_request '=> 10000, 

            ' task_worker_num '=> 1,   // número de tareas de los procesos
 
            "  task_ipc_mode "=> 3,array ( $ this , 'OnReceive' )); $ this









        

        -> ser-> en ( 'tarea', array ( $ this , 'onTask' )); 

        $ this -> ser-> en ( 'Finalizar', array ( $ this , 'onFinish' )); 

        $ this -> ser-> start (); 

    } 

    Pública  función OnReceive (swoole_server $ serv , $ fd , $ from_id , $ data ) { 

        // 放入任务队列,开始执行

        $ task_id = $ serv -> tarea ( $ data ); 

    } 

    Pública  función onTask ( $ serv , $ task_id ,$ from_id , $ data ) { 

      // 做一些事情

    } 客户端



 clase de cliente { 

    privado  $ cliente , $ ip , $ puerto , $ params ; 

    pública  función __construct ( $ ip , $ puerto , $ params ) 

    { 

        $ this -> ip = $ ip ; 

        $ this -> port = puerto $ ; 

        $ this -> params = $ params ; 

        $ this -> cliente = nueva swoole_client (SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC); 

        $ el este -> Client-> SET ( array (

             'open_length_check' => true , 

            'package_length_type' => 'N', 

            'package_length_offset' => 0,       // N-byte longitud del paquete es un valor
 
            ' package_body_offset '=> 4,       // byte que comienza a calcular la longitud
 
            ' package_max_length '=> 2.000.000,   // protocolo de longitud máxima 

        )); 

        // establecer la función de devolución de llamada de eventos 

        $ el esta -> cliente-> oN (' Conectar', array ( $ del este , 'la onConnect' )); 

        $ del este -> cliente-> ON ( 'la recepción',array ( $ this, 'OnReceive' )); 

        $ this -> cliente-> en ( 'Cerrar', array ( $ this , 'onClose' )); 

        $ this -> cliente-> en ( 'error', array ( $ this , 'onError' )); 

        // 发起网络连接

        $ this -> cliente-> connect ( $ ip , $ puerto , 3 ); 

    } 

    Pública  función OnReceive ( $ CLI , $ data ) { 

        echo "Recibido:". $ data . "\ n" ;


     

        $ data = paquete ( 'N', strlen ( $ data )). $ data ; 

        $ CLI -> enviar ( $ data ); 

        $ cli -> close (); 

    } 

    Pública  función onClose ( $ CLI ) 

    { 

        echo "estrecha conexión \ n" ; 

    } 

    Pública  función onError () 

    { 

        echo "error de conexión \ n" ; 

    } 

}

 

Supongo que te gusta

Origin www.cnblogs.com/zzz2000/p/12639269.html
Recomendado
Clasificación