因此在stackoverflow上搜索了如何使用EventSource的内容,并使用了此处找到的PHP示例之一。但是我看到一个奇怪的行为,在每个“ onmessage”之后触发“ onerror”,所以这个问题分为两个部分:
1)这是正常现象吗?发生消息后是否应触发错误 2)如果没有,那是怎么回事? 2.1)循环不会停止,它会继续并起作用,但是在每次出现消息后仍会使用onerror。
JavaScript
constructor() {
this._event = new EventSource('/rest/api/event/stream');
this._event.onerror = () => console.log('test');
this._event.onmessage = this.onData.bind(this);
}
PHP
public function getEventStream(Request $request) {
$response = Symfony\Component\HttpFoundation\StreamedResponse();
$response->headers->set('Content-Type', 'text/event-stream');
$response->headers->set('Cache-Control', 'no-cache');
$response->setCallback(function() {
$data = $this->getData();
echo 'data: ' . json_encode($data) . "\n\n";
ob_flush();
flush();
sleep(5);
});
return $response;
}
其他信息:PHP使用laravel作为框架 我尝试在响应周围使用“ while(true)”,但随后它永远不会触发onmessage