PHP非常驻内存下的异步

PHP基础 专栏收录该内容
16 篇文章 0 订阅

在使用非常驻内存的PHP项目时,偶尔会有需要异步执行的逻辑,一般方法是使用定时请求某个url,但总有一些情况下无法固定时间去执行,太过于频繁执行又会浪费内存。这个时候可以用PHP代码进行url请求异步执行的逻辑。

/**
 * 异步post请求和执行的url
 *
 * @param string $url
 * @param array $param
 * @return void
 */
function doRequest($url, $param = []) {
    // nginx 需要在网站的 配置文件添加 以下代码
    // 客户端主动断掉连接之后,Nginx 会等待后端处理完(或者超时);
    // fastcgi_ignore_client_abort on;

    $urlinfo = parse_url($url);
    // dump($urlinfo);die;
    $host = $urlinfo["host"];
    $path = $urlinfo["path"];
    $query = isset($param)? http_build_query($param) : "";
    $port = 80;
    $errno = 0;
    $errstr = '';
    $timeout= 10;
    $fp = fsockopen($host, $port, $errno, $errstr, $timeout);
    $out = "POST ".$path." HTTP/1.1".PHP_EOL;
    $out .= "Host: ".$host.PHP_EOL;
    $out .= "Content-Length: ".strlen($query).PHP_EOL;
    $out .= "Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*".PHP_EOL;
    $out .= "Accept-Language: zh-CN,en-US;q=0.7,ko-KR;q=0.3".PHP_EOL;
    $out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)".PHP_EOL;
    $out .= "Content-Type: application/x-www-form-urlencoded".PHP_EOL;
    $out .="Connection: clone".PHP_EOL;
    $out .="Cache-Control: no-cache".PHP_EOL.PHP_EOL;
    $out .= $query;
    $data = fwrite($fp, $out);

    // $content = '';
    // if (!feof($fp))
    // {
    //     $content .= fgets($fp);
    // }
    fclose($fp);
}

 

  • 0
    点赞
  • 2
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值