php实现异步

转自:点击打开链接

php本身是没有异步的,但我们经常会需要处理一些耗时操作,如微信公号推送给所有用户,发送邮件、短信等等。

实现的方式也是很多,gearman、队列等等。这里我用fscokopen,简单易操作,不用去管服务器那边的事情。

function asyncHandle($url, $post_data = ''){
        $info = parse_url($url);
        $fp = fsockopen($info["host"], 80, $errno, $errstr, 30);
        $head = "POST ".$info['path']."?".$info["query"]." HTTP/1.0\r\n";
        $head .= "Host: ".$info['host']."\r\n";
        $head .= "Referer: http://".$info['host'].$info['path']."\r\n";
        $head .= "Content-type: application/x-www-form-urlencoded\r\n";
        $head .= "Content-Length: ".strlen(trim($post_data))."\r\n";
        $head .= "Connection: Close\r\n"; 
        $head .= "\r\n";
        $head .= trim($post_data);
        $write = fputs($fp, $head);
//        while (!feof($fp))
//        {
//            $line = fread($fp,4096);
//            echo $line;
//        }
    fclose($fp);
    return true;
}

之前也试过这个  可以做到发送完请求就关闭返回,不用等待结果。拿微信推送消息来说,这个接收的不是键值对那样的传参方式,而是一段json格式的数据,我post json数据没解决,一直出现post data empty。无奈之下只能通过fsockopen先调用自己服务器上已经写好的方法,通过这个方法再去执行消息的推送,带上必要的参数(key=value&key2=value2),这样就达到了异步的效果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值