为了账号安全,请及时绑定邮箱和手机立即绑定

如何在PHP中发出异步HTTP请求

如何在PHP中发出异步HTTP请求

PHP
慕森王 2019-06-18 14:38:51
如何在PHP中发出异步HTTP请求PHP中是否有一种进行异步HTTP调用的方法?我不在乎你的反应,我只想做点什么file_get_contents(),但不要等到请求完成后才执行其余的代码。这对于启动应用程序中的“事件”或触发长进程非常有用。有什么想法吗?
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我以前接受的答案行不通。它仍在等待回应。不过,这确实有效,从如何在PHP中发出异步GET请求?

function post_without_wait($url, $params){
    foreach ($params as $key => &$val) {
      if (is_array($val)) $val = implode(',', $val);
        $post_params[] = $key.'='.urlencode($val);
    }
    $post_string = implode('&', $post_params);

    $parts=parse_url($url);

    $fp = fsockopen($parts['host'],
        isset($parts['port'])?$parts['port']:80,
        $errno, $errstr, 30);

    $out = "POST ".$parts['path']." HTTP/1.1\r\n";
    $out.= "Host: ".$parts['host']."\r\n";
    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out.= "Content-Length: ".strlen($post_string)."\r\n";
    $out.= "Connection: Close\r\n\r\n";
    if (isset($post_string)) $out.= $post_string;

    fwrite($fp, $out);
    fclose($fp);}


查看完整回答
反对 回复 2019-06-18
?
九州编程

TA贡献1785条经验 获得超4个赞

如果您控制要异步调用的目标(例如您自己的“long task.php”),则可以从该端关闭连接,两个脚本将并行运行。它的工作方式如下:

  1. php通过curl打开long task.php(这里没有魔法)
  2. php关闭连接并继续(魔术!)
  3. 当连接关闭时,curl返回到Quick.php
  4. 这两个任务同时进行。

我试过了,效果很好。但是,除非您在进程之间创建一些通信方式,否则Quick.php将不知道有多长的task.php正在执行。

在执行任何其他操作之前,先尝试使用long task.php中的代码。它将关闭连接,但仍然继续运行(并禁止任何输出):

while(ob_get_level()) ob_end_clean();header('Connection: close');ignore_user_abort();ob_start();
echo('Connection Closed');$size = ob_get_length();header("Content-Length: $size");ob_end_flush();flush();

代码是从PHP手册的用户提供的注释并有所改善。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 1607 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信