将服务器发送的事件与doctrine事件结合使用来检测更改?

时间:2017-09-07 12:46:16

标签: php symfony session doctrine server-sent-events

在我的应用程序中,我正在使用服务器发送的事件并且具有以下情况(伪代码):

$response = new StreamedResponse();
$response->setCallback(function () {
    while(true) {
        // 1. $data = fetchData();
        // 2. echo "data: $data";
        // 3. sleep(x);
    }
});
$response->send();

我的SSE响应类接受回调来收集数据(步骤1),实际执行数据库查询。现在我的问题:因为我试图避免每X秒轮询数据库,我想利用Doctrine的onFlush事件来设置一个标志,相应的实体已被实际更改,然后在其中进行检查fetchData回调。通常,我会通过在当前用户会话上设置标志来执行此操作,但由于流循环不断写入数据,因此无法在回调中访问会话。那么有人知道如何解决这个问题吗?

BTW:我正在使用Symfony 3.3和Doctrine 2.5 - 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我知道这个问题来自很久以前,但这是一个建议: 使用共享内存(php shm _ *()函数)。这样,您的标志就不会绑定到特定的会话。

请确保锁定和解锁对共享内存的访问权限(我通常使用信号灯)。