我在 PHP 服务器上实现了一个简单的端点,我在 Angular 应用程序中使用 Azure Event Source 订阅它,以便能够通过请求发送标头。
连接可以自行工作,我可以恢复流,但是一旦建立连接,所有其他呼叫都会锁定。它们将保持“待处理”状态,直到我关闭与 SSE 端点的连接。我已经尝试过
session_write_close();
但没有帮助。我有什么遗漏的吗?理想情况下,一旦建立连接,我就不希望它影响任何其他呼叫。非常感谢任何建议。
PHP:服务器端实现
public function newSSEEvent()
{
session_write_close();
header("Content-Type: text/event-stream");
header("Cache-Control: no-store");
$counter = rand(1, 10);
while (true) {
echo "event: Date\n";
$curDate = date(DATE_ISO8601);
echo 'data: {"time": "' . $curDate . '"}';
echo "\n\n";
$counter--;
if (!$counter) {
echo "event: Ping\n";
echo 'data: Last Ping' . $curDate . "\n\n";
$counter = rand(1, 10);
}
ob_flush();
flush();
sleep(1);
}
}
Angular:客户端实现
async getEvent(url) {
await fetchEventSource(
url,
{
method: "GET",
headers: {
CustomHeaders
},
onmessage(ev) {
console.log(ev);
},
}
);
}
你好,我有同样的问题。你能解决它吗?你做了什么来修复它?谢谢你