在我的应用程序中,我正在使用服务器发送的事件并且具有以下情况(伪代码):
$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 - 感谢您的帮助!
答案 0 :(得分:0)
我知道这个问题来自很久以前,但这是一个建议: 使用共享内存(php shm _ *()函数)。这样,您的标志就不会绑定到特定的会话。
请确保锁定和解锁对共享内存的访问权限(我通常使用信号灯)。