zoukankan      html  css  js  c++  java
  • PHP异步请求实现方式

    <?php
    /**
     * 异步 执行程序
     * @param string $path 异步url 地址
     * @param array $postData 传递的参数
     * @param string $method 请求方式
     * @param string $url 请求地址
     * @return bool
     */
    function request_asynchronous($path, $method = "POST", $postData = array(), $url = ''){
        set_time_limit(0);  //设置不限执行时间
        ignore_user_abort(true);  //忽略客户端中断
        if(empty($path)){
            return false;
        }
    
        if(!$url){
            $host = $_SERVER['HTTP_HOST'];
        }else{
            $arr = parse_url($url);
            $host = $arr['host'];
        }
    
    
        $port = 443;//80
        $host = $port == 443 ? 'ssl://'.$host : $host;
        $errNo = 0;
        $errStr = '';
        $timeout = 120;
        $fp = '';
        if(function_exists('fsockopen')) {
            $fp = fsockopen($host, $port, $errNo, $errStr, $timeout);
        } elseif(function_exists('pfsockopen')) {
            $fp = pfsockopen($host, $port, $errNo, $errStr, $timeout);
        } elseif(function_exists('stream_socket_client')) {
            $fp = stream_socket_client($host.':'.$port, $errNo, $errStr, $timeout);
        }
    
        if (!$fp) {
            return false;
        }
    
        stream_set_blocking($fp, 0); //开启非阻塞模式
        stream_set_timeout($fp,  3); //设置超时时间(s)
    
        $date = [];
        if($postData) {
            //处理参数
            foreach ($postData as $key => $value) {
                if(is_array($value)){
                    $date[$key] = serialize($value);
                }else{
                    $date[$key] = $value;
                }
            }
        }
    
        $query = $date ? http_build_query($date) : '';
        if ($method == "GET") {
           $path .= "?".$query;
        }
        //http消息头
        $out = $method." ".$path." HTTP/1.1
    ";
        $out .= "HOST: ".$host."
    ";
        if ($method == "POST") {
            $out .= "Content-Length:".strlen($query)."
    ";
        }
        $out .= "Content-Type: application/x-www-form-urlencoded
    ";
        $out .= "Connection: Close
    
    ";
        //$out .= "Cookie: ".$cookie."
    
    ";
        if ($method == "POST") {
            $out .= $query;
        }
    
        fputs($fp, $out);
        //忽略执行结果
        /*while (!feof($fp)) {
            echo fgets($fp, 128);
        }*/
        usleep(5000);
        fclose($fp);
    
        return true;
    }
    
    //调用方式
    request_asynchronous("/api/files/index",'GET');
    ?>
  • 相关阅读:
    函数细节
    ElementUI的Table组件自定义合计行内容
    好看的字体收藏
    MD5加密生成与SHA526加密生成
    XML和Map之间互相转换
    银联支付
    微信支付开发
    MySql创建索引,添加索引
    jqgrid分级表格合并
    关于C# XmlDocument方法Load加载流后自动释放流的解决方法
  • 原文地址:https://www.cnblogs.com/guliang/p/12848520.html
Copyright © 2011-2022 走看看