Php 是否将服务器发送的事件与条令事件结合使用以检测更改?

Php 是否将服务器发送的事件与条令事件结合使用以检测更改?,php,symfony,session,doctrine,server-sent-events,Php,Symfony,Session,Doctrine,Server Sent Events,在我的应用程序中,我使用服务器发送的事件,出现以下情况(伪代码): 我的SSE响应类接受回调以收集数据(步骤1),这实际上执行数据库查询。现在来看我的问题:由于我试图避免每X秒轮询一次数据库,我想利用Doctrine的onFlush事件设置一个标志,表明对应的实体实际上已经更改,然后在fetchData回调中检查该标志。通常,我会通过在当前用户会话上设置一个标志来实现这一点,但由于流循环不断写入数据,因此无法在回调中访问会话。有人知道如何解决这个问题吗 顺便说一句:我正在使用Symfony 3.

在我的应用程序中,我使用服务器发送的事件,出现以下情况(伪代码):

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


顺便说一句:我正在使用Symfony 3.3和Doctrine 2.5-感谢您的帮助

我知道这个问题由来已久,但这里有一个建议: 使用共享内存(php shm_*()函数)。这样,您的标志就不会绑定到特定会话


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

这是一种非常有趣的方法,我没有想到。如果我将再次与SSE合作,我将尝试一下——感谢您的贡献,非常感谢!
$response = new StreamedResponse();
$response->setCallback(function () {
    while(true) {
        // 1. $data = fetchData();
        // 2. echo "data: $data";
        // 3. sleep(x);
    }
});
$response->send();