fastcgi_finish_request() 遇到的坑

官方文档给出的解释是

此函数冲刷(flush)所有响应的数据给客户端并结束请求。 这使得客户端结束连接后,需要大量时间运行的任务能够继续运行。

我们看一个例子

<?php
 
echo '例子:';
 
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 上传视频\n", FILE_APPEND);
 
fastcgi_finish_request();
 
sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 转换格式\n", FILE_APPEND);
 
sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 提取图片\n", FILE_APPEND);
 
?>

当使用该函数时浏览器会直接返回echo 的内容。 客户端已经断开连接
实际上服务端还会继续运行下去。


实际遇到的坑是线上业务逻辑在完成对用户的一系列的业务逻辑处理后 需要向移动端推送一条推送消息。

修改前是 用户业务逻辑 和消息推送是线性的。

修改后 业务逻辑  移动端请求借口,调用fastcgi_finish_request函数 客户端继续处理别的事情返回原来的逻辑 服务端然后 直接请求第三推送服务器。然后此时一直收不到推送消息有报错 但自己服务器的请求没有中断意味着 客户端不受任何影响。。也就是说很有可能是第三方推送服务器认为在 调用fastcgi_finish_request后再去请求,推送服务器可能是认为该次请求无效所以没有推送。 


--------------------- 
作者:u010320371 
来源:CSDN 
原文:https://blog.csdn.net/u010320371/article/details/78075267 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值