PHP 服务器发送事件锁定所有其他请求

问题描述 投票:0回答:1

我在 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);
        },
      }
    );
  }
php angular server-sent-events
1个回答
0
投票

你好,我有同样的问题。你能解决它吗?你做了什么来修复它?谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.