也许有人知道如何最好地解决这个问题。
我有一个ZF2应用程序,客户端可以在其中上传文件。该文件包含订单,然后需要处理。如果我立即触发开始处理此文件的事件,则客户端无法继续(执行其他操作)。因此,我想在后台触发一个事件,开始处理此文件,同时我的操作将下一页返回给我的客户端,以便他或她可以继续并填写其他内容。当然,我现在可以通过cron工作来解决这个问题......但也许现在有另一种方式ZF2是如此多的事件驱动? 是否可以在后台触发事件(或服务),如下所示:
public function csvUploadAction()
{
$id = (int) $this->params()->fromRoute('id', 0);
$form = new CsvForm($id);
// do some validating and stuff...
if ($form->isValid()) {
// more stuff..
$this->getEventManager()->trigger('readCsvInBackground', $this, $parameters);
return $this->redirect()->toRoute('publications', array(
'action' => 'edit', 'id' => $id
));
// etc..
}
我已经搜索过arround这样的解决方案,但找不到任何东西(其他的则使用cron作业)。有人有想法吗? 非常感谢你的时间!
答案 0 :(得分:2)
Bram是正确的,你想要一个工作队列。
你可能会看一下SlmQueue,这是一个ZF2模块,它是一个队列抽象层(目前有Beanstalkd,Amazon SQS和DoctrineORM的后端),如果不使用它,至少是为了一些灵感。我正在使用beanstalkd,效果很好。
当然,您可以简化并直接使用beanstalkd,可能通过PHP的Pheanstalk客户端库。
答案 1 :(得分:1)