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 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/zhao_teng/article/details/87879816