无法使用 SSE 和 PHP 发送自定义事件
Unable to send custom events with SSE and PHP
我有使用默认消息类型的服务器发送事件 (SSE)。但是我无法让自定义事件类型起作用。
在我的客户端上
const sse = new
EventSource('/api/events/transaction-event');
sse.onopen = (d=>console.log(d))
sse.addEventListener("message", function(e) {
console.log('message')
console.log(e)
})
sse.addEventListener("test", function(e) {
console.log('test')
console.log(e)
})
在我的服务器上
class Events
{
public function test(Request $request){
$response = new StreamedResponse(function() use ($request) {
while(true) {
// echo('event: test\n');
echo 'data: ' . json_encode(['hello'=>'world']) . "\n\n";
ob_flush();
flush();
sleep(2);
}
});
$response->headers->set('Content-Type', 'text/event-stream');
$response->headers->set('Connection', 'keep');
$response->headers->set('Cache-Control', 'no-cache');
return $response;
}
}
运行这段代码,你可以看到event: test\n
被注释掉了,我在浏览器中得到了类型为message
的SSE。但是,如果我取消注释 event: test\n
以尝试将事件类型更改为 test
,则客户端侦听器不会调用(默认的 message
类型也不会)。我在这里错过了什么吗?感谢您的帮助。
尝试更改引号:
// echo('event: test\n');
收件人:
echo("event: test\n");
允许处理新行
我有使用默认消息类型的服务器发送事件 (SSE)。但是我无法让自定义事件类型起作用。
在我的客户端上
const sse = new
EventSource('/api/events/transaction-event');
sse.onopen = (d=>console.log(d))
sse.addEventListener("message", function(e) {
console.log('message')
console.log(e)
})
sse.addEventListener("test", function(e) {
console.log('test')
console.log(e)
})
在我的服务器上
class Events
{
public function test(Request $request){
$response = new StreamedResponse(function() use ($request) {
while(true) {
// echo('event: test\n');
echo 'data: ' . json_encode(['hello'=>'world']) . "\n\n";
ob_flush();
flush();
sleep(2);
}
});
$response->headers->set('Content-Type', 'text/event-stream');
$response->headers->set('Connection', 'keep');
$response->headers->set('Cache-Control', 'no-cache');
return $response;
}
}
运行这段代码,你可以看到event: test\n
被注释掉了,我在浏览器中得到了类型为message
的SSE。但是,如果我取消注释 event: test\n
以尝试将事件类型更改为 test
,则客户端侦听器不会调用(默认的 message
类型也不会)。我在这里错过了什么吗?感谢您的帮助。
尝试更改引号:
// echo('event: test\n');
收件人:
echo("event: test\n");
允许处理新行