我正在使用Symfony4.4和redis进行会话。
我有一些控制器,我希望更新后在后台数据库发送回复给用户。
所以我写了这样的代码:
class GetCatController extends AbstractController
{
public function getCatController(LoggerInterface $logger, ManagerRegistry $doctrine, SessionInterface $session, ValidatorInterface $validator)
{
[...]
$replyToSend = new JsonResponse($reply, 200);
$replyToSend->send();
//My back ground activity like to do some query on the db.
[...]
return null;
}
但我对会议有些问题。
有没有更好的方法在回复用户之前创建并运行后台活动发送?
1条答案
按热度按时间mrfwxfqh1#
有两种体面的方法可以做到这一点。
如果您是在phpfpm(不是mod\php)下运行php,那么您可以在symfonypre-4.4中调度并捕获一个事件kernel.terminate,这称为
PostResponseEvent
(TerminateEvent
从4.4/5.0)。更好的选择可能是与symfony信使。在这里,您将创建一个消息对象,其中包含执行任务所需的所有信息,并将其发送到后台队列(redis支持作为队列)。然后,一个工作者使用该消息,并执行该任务。