Red de conocimiento informático - Material del sitio web - Cómo utilizar la función fsockopen para implementar la ejecución asincrónica de PHP

Cómo utilizar la función fsockopen para implementar la ejecución asincrónica de PHP

Cuando un servidor web ejecuta un script PHP, a veces lleva mucho tiempo devolver resultados y los scripts posteriores también deben esperar mucho tiempo antes de continuar. Si simplemente desea activar la ejecución de un script largo sin esperar el resultado, puede usar la función fscokopen.

PHP soporta la programación de sockets. La función fscokopen devuelve un identificador al host remoto que puede usarse para realizar operaciones fwrite, fgets y fread, al igual que el identificador devuelto por fopen. Puede usar fsockopen para conectarse a un servidor local, activar la ejecución del script y luego regresar inmediatamente sin esperar a que se complete la ejecución del script, logrando así el efecto de ejecución asincrónica de PHP.

El código de muestra es el siguiente:

functiontriggerRequest($url, $post_data=array(), $cookie=array()){

$method ="GET ";//Pasar algunos parámetros al script activado mediante POST o GET

$method="GET"; //POST o GET.

Script

$url_array=parse_url($url); //obtener información de URL

$port=isset($url_array['port'])?$url_array['port'] : 80;

$fp=fsockopen($url_array['host'], $puerto, $errno, $errstr,

if(! $fp){

returnFALSE;

}

$getPath=$url_array['ruta']." $url_array['consulta'];

if(!empty($post_data)){

$method="POST";

}

$header=$method."" .$getPath;

$header.="HTTP/1.1\r\n";

$header.="Host: ".$url_array['host']." \r\n"; //El dominio de host HTTP1.1 no se puede omitir

/*Los siguientes campos de encabezado se pueden omitir

$header.="User-Agent: Mozilla/ 5.0(Windows ;U;

WindowsNT5.1;en-US;rv:1.8.1.13 )Gecko/20080311Firefox/2.0.0.13\r\n";

$header. ="Aceptar : texto/xml, aplicación/xml, aplicación/

xhtml xml, texto/html; q=0.9, texto/plain; q=0.8, imagen/png, q=0.5\r\ n";

$header.="Accept-Language: en-us, en; q=0.5";

$header.="Accept-Encoding: gzip, deflate\ r\n ";

*/

$header.="Conexión: Cerrar\r\n";

if(!empty($cookie) ){

$_cookie=strval(NULL);

foreach($cookies$k=gt;$v){

$_cookie.=$k ."= ".$v.";";

}

$cookie_str="Cookie: ".base64_encode($_cookie)."\r\n";// Pasar cookie

$header.=$cookie_str;

}

if(!empty($post_data)){

$_post =strval( NULL);

foreach($post_ dataas$k=gt;$v){

$_post.=$k."=".$v."amp ;";

}

$post_str="Tipo de contenido: aplicación/x-www-form-urlencoded\r\n";

$post_str .=" Contenido

-Longitud: ". strlen($_post).\r\n"; //La longitud de los datos POST

$post_str.=$_post."\r\n" //Pase el Datos POST

$header.=$post_str;

}

fwrite($fp, $header);