PHP实现异步请求非阻塞

PHP实现异步请求非阻塞

function fosck_post($url, $param){

    $host = parse_url($url, PHP_URL_HOST);
    $port = 80;

    $urlInfo = parse_url($url);
    if (isset($urlInfo['scheme']) && strcasecmp($urlInfo['scheme'], 'https') === 0) //HTTPS
    {
        $prefix = 'ssl://';
        $port = 443;
    }else{  //HTTP
        $prefix = 'tcp://';
        $port = isset($urlInfo['port']) ? $urlInfo['port'] : 80;
    }


    $errno = '';
    $errstr = '';
    $timeout = 30;

    $data = http_build_query($param);

    // create connect
    $fp = fsockopen($prefix. $host, $port, $errno, $errstr, $timeout);

    if(!$fp){
        return false;
    }

    // send request
    $out = "POST ${url} HTTP/1.1
";
    $out .= "Host:${host}
";
    $out .= "Content-type:application/x-www-form-urlencoded
";
    $out .= "Content-length:".strlen($data)."
";
    $out .= "Connection:close

";
    $out .= "${data}";

    fwrite($fp, $out);

    //忽略执行结果;否则等待返回结果
    //        if(APP_DEBUG === true){
    if(false){
        $ret = '';
        while (!feof($fp)) {
            $ret .= fgets($fp, 128);
        }
    }

    usleep(20000); //fwrite之后马上执行fclose,nginx会直接返回499

    fclose($fp);
}
原文地址:https://www.cnblogs.com/ccw869476711/p/15149054.html