PHP-Gearman:仍然没有办法从后台工作程序中检索自定义数据吗?
作者:互联网
首先,我知道this问题:
> Gearman: Sending data from a background worker to the client
我想知道的是Gearman仍然是这种情况吗?我打算将一批图像URL从PHP Web应用程序发送到gearman worker(也用PHP编写;我们称其为“主要工人”)进行异步处理.然后,该工作人员将为每个映像向低层工作人员提交单独的任务(通过addTask()),调用runTasks()并等待任务完成,同时侦听异常,累积错误消息并更新总体作业状态.
尽管我完全可以使用jobStatus()调用从Main Worker检索总体状态,但是只需说在返回[false,false,0,0]时处理了所有图像,但我绝对需要能够通知用户某些图像无法从其各自的URL中检索或存储在服务器上.
我想我总是可以将自定义数据存储在Memcache中,然后从Web应用程序中检索它,但是对我来说似乎“比较脏”……
我没有尝试得到任何结果,因为从php.net手册中看到的情况来看,即使异常处理也只能在同步提交任务时完成,更不用说自定义数据检索了.我只是希望可能会缺少一些东西.
我记得正确,我们使用的是Ubuntu Server 12.04和libgearman6(v 0.27)和PHP 5.3.10. Gearman扩展程序的版本是1.0.2.我认为这里的数据库无关紧要,因为我不会在任何一个工作人员中使用它.而且我认为我们现在不使用持久性队列.
解决方法:
由于Gearman不会在任务完成后将任何任务信息保留在内存中(只需将其报告给同步任务即可),因此,如果不将其存储在第三方位置,您将无法在Web应用程序中检索它.为此,我们通常在应用程序中使用一个简单的Web服务,当任务完成或发生错误时,让工作人员可以回调应用程序.这样一来,我们就可以在发生此类错误的应用程序中保留业务逻辑,从而使工作人员更通用(我们可能需要在许多应用程序中调整图像大小,但是某些应用程序可能需要启动几个子任务,这些子任务取决于首先完成的图像大小调整.
在编写时,您还可以让工作人员直接将任务状态或内存缓存状态写入数据库,但是我发现让应用程序本身处理逻辑而不是必须进行更改,特殊情况下工作人员可以更好地工作.它也非常适合于工作程序框架,使您可以保持相同的标准化方法来处理实际工作程序代码中的回调.
标签:php,asynchronous,gearman 来源: https://codeday.me/bug/20191011/1894332.html