php实现异步反馈,PHP实现异步回调的总结

本文介绍了在PHP中实现异步回调的两种方案,包括使用子进程和编写扩展。详细讨论了在php-fpm模式下遇到的问题,如僵尸进程,并提供了解决方案。最后,作者分享了一个实际的实现成果php-async,并提到了使用NodeJS的libuv库作为更好的异步处理方式。
摘要由CSDN通过智能技术生成

最近遇到个问题,PHP的异步回调怎么实现?

Workman、Swoole、fastcgi_finish_request?

Workman、Swoole这些框架虽然对异步回调实现的很好,但是如果只需要简单的异步回调就上这些未免大材小用。

而fastcgi_finish_request虽然使用方面,但毕竟只能在php-fpm模式下使用,而且一次请求只能使用一次。

之后就一直在思考:能不能自己实现一个PHP可用的简单异步回调呢?最初出现在我脑海的有几个方案:

编写PHP扩展,使用C/C++创建守护进程进程,用于监听是否有异步任务到来,如果有任务到来,则执行任务及回调函数。而PHP进程则将异步任务传递给该监听进程,从而实现异步。

使用pcntl扩展创建子进程,并让子进程脱离父进程的控制,成为守护进程。子进程用于处理耗时的异步任务,父进程处理HTTP请求及返回响应。

由于第二种方案更简单,因此选择使用第二种方案进行实现。

1. 实现原理及思路

实现原理比较简单:

在当前进程中创建子进程,父进程处理耗时较短的HTTP业务逻辑;子进程处理耗时较长的任务,例如邮件发送等。

创建子进程后,让子进程脱离父进程的控制,成为守护进程。

父进程通过设置Callable或Closure函数,让子进程执行异步任务及回调函数。

每个异步任务都需要两个关键元素组成:异步任务本身、回调函数。所以设计了JobInterface接口,该接口要求实现两个方法:job、callback,分别对应异

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值