• 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');
    ?>
  • 相关阅读:
    COM学习(三)——数据类型
    com学习(一)GUID 和 接口
    Dll学习(二)__declspec用法详解
    dll 学习(一)
    PostMessage与SendMessage的区别(二)
    sendmessage和postmessage的区别
    用Java开发代理服务器
    JAVA编写WEB服务器
    【1.3】Django HelloWorld
    【1.2】初识Django应用
  • 原文地址:https://www.cnblogs.com/guliang/p/12848520.html
Copyright © 2020-2023  润新知