php – 节俭异步函数中的回调? - 代码日志

php – 节俭异步函数中的回调?

Thrift,可以将use the oneway modifier指定为异步调用。

显然,当函数的执行完成时,不可能定义回调。

似乎唯一的可能性是给我的Thrift客户端(PHP)一些“服务器”功能,这样当服务器端的计算量很大时,我可以发送通知给它。这意味着我应该有一个新的.thrift文件,新的定义,新的服务和所有其余的,我应该与Thrift生成php服务器端代码。

即使这是可行的,它似乎对我来说太过分了,我想知道是否有更聪明的方式来实现回调。

期待您的一些反馈,伙计们。

Roberto,不幸的是Thrift框架没有这样的内置功能。可能有许多替代方案,具体取决于您希望PHP客户端会话在您通常等待计算密集型Thrift服务器应答的时间(如果您没有单独使用)。

我现在只能想象一下,在编码一个用户(或多个并行用户)可以触发计算密集型任务的Web应用程序的情况下,您想向所述用户提供一些反馈同时说任务流失。

从一开始,您绝对正确地尝试避免您想要避免的解决方案。您的PHP客户端会话无法保护回调界面,而不会阻止(除非您尝试使用pcntl_fork或其他PHP threading band-aid更深入挖掘您的洞)

最简单的和IMHO最好的方式是从事件驱动的模型(我想在服务器完成时被通知)到轮询模型的两个切换(我会定期询问服务器是否完成)。有几种实现轮询模型的方法,在服务器和客户端都有多个实现选项,例如:

>在调用阶段:

> PHP客户端会话分配唯一​​的job_id值;会话然后使异步的oneway调用void compute(…,job_id)到计算密集型Thrift服务器,

– 要么 –

> PHP客户端会话使得计算密集型Thrift服务器同步调用job_id start_compute(…)服务器分配唯一的job_id值,然后在单独的线程/进程中产生实际的计算密集型任务,立即返回到具有已分配job_id的PHP客户端会话

>在计算阶段:

> PHP客户端会话继续通过对计算密集型Thrift服务器的同步状态get_status(job_id)调用来定期检查计算密集型作业的状态,

– 要么 –

> PHP客户端会话立即终止,以便在将job_id传递到浏览器之后释放宝贵的资源,并指示浏览器定期检查计算密集型作业job_id的状态(例如通过META REFRESH或通过XHR (AJAX)请求从Javascript等);浏览器检查产生一个简单的PHP客户端会话,该会话执行对计算密集型Thrift服务器的同步状态get_status(job_id)调用,在将状态(无论哪个可能)转发到浏览器之后立即终止

http://stackoverflow.com/questions/2554999/callbacks-in-thrift-asynchronous-functions

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:php – 节俭异步函数中的回调?