php中的异步实现方式

19 篇文章 1 订阅

前言:

在工作中我们经常遇到一些比较耗时的任务,比如用户注册发送邮件,审核短信通知等功能,同步执行这些功能的话,响应时间就会变长,所以一般我们会用异步执行的方式。

方法:

fastcgi_finish_request() 冲刷 (flush) 所有响应的数据给客户端,此函数冲刷(flush)所有响应的数据给客户端并结束请求。 这使得客户端结束连接后,需要大量时间运行的任务能够继续运行。
注意:此函数需要 fpm,window 下无 fpm 无法使用,需要自己编译。

ignore_user_abort(true) 设置此函数可以忽略客户端中断后,保证 php 脚本继续执行,此时需要解决另一个问题,如何通知客户端进行中断,可以设置 header 主动通知客户端中断。

ob_end_clean();
header("Connection: close\r\n");
ignore_user_abort(true);//optional
ob_start();
echo ('something');
$size = ob_get_length();
header("Content-Length: $size");//必须写这个长度,否则无效。
ob_end_flush();
flush();
ob_end_clean();

register_shutdown_function(function() {
    sleep(10);
    echo('Text user will never see');
    file_put_contents('test.log', 'hello' . PHP_EOL, FILE_APPEND);
});

curl 一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等,php 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。我们可以使用 curl 通过我们的服务器去获取其他服务器的数据,比如气象局服务器的天气预报数据、比特币交易所的交易记录数据等。

在 php 中使用 curl,需要开启 curl 扩展:
1.在 php.ini 里面开启 curl 这个扩展
2.将PHP的安装路径保存到环境变量的系统变量中(环境变量之间的分隔符是英文的分号)
3.重启apache服务器
4.重启计算机
实现curl的基本步骤:
1.初始化 curl_init();
2.设置相关变量 curl_setopt()
3.执行并获取结果 curl_exec()
4.释放对象 curl_close()

$ch = curl_init();
$curl_opt = array(CURLOPT_URL, 'http://www.example.com/backend.php',
CURLOPT_RETURNTRANSFER, 
1,CURLOPT_CONNECTTIMEOUT_MS, 1);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);

popen 打开一个新的命令,利用 linux 的 & 让它后台执行,window 中无法使用。

pclose(popen("php ./test.php &", 'r'));

redis 任务投递,将任务序列化或把参数投递给 redis 或数据库,然后开启一个轮训任务,不断的去执行被投递的任务。

使用第三方框架的多进程模式,例如:swoole,workerman。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值