我在 php 7.4(产品和本地)的服务器上将 SSE 与 laravel 5.7 集成,但在本地我毫无问题地收到事件,不幸的是,客户端最多可能要等待 10 分钟才能开始接收事件。尤其是在服务器端,根据我的日志,它会在连接打开后立即开始发送事件,我想知道是什么阻止(或缓冲)了一段时间后将它们发送到的结果,什么会使我的服务器在生产中崩溃.
控制器
public function index()
{
return response()->stream(function () {
try{
while(true){
Log::info("in".now());
echo "data: " . now() . "\n\n";
ob_flush();
flush();
Log::info("out".now());
sleep(3);
}
}catch(\Exception $e){
Log::error($e->getMessage());
}
if (connection_aborted()) {break;}
}, 200, [
'Content-Type' => 'text/event-stream',
'Cache-Control' => 'no-cache',
'Connection' => 'keep-alive'
]);
}
Javascript
<script>
window.onload= function(){
console.log('loaded')
var source = new EventSource('{{route("myroute",['transaction_id'=>$payment->trans->id])}}');
source.addEventListener("message", function(event) {
const trans = event.data;
console.log(Date(),trans)
});
source.onerror = (e)=>{
console.log(e)
}
</script>