EventSource 来接收这些事件。
在 Bun 中,您可以通过返回一个主体为流式来源的 Response,并将 Content-Type 头设置为 text/event-stream 来实现 SSE 端点。
Bun.serve 默认会在 10 秒 后关闭空闲连接。一个安静的 SSE 流会被视为空闲,因此下面的示例调用了 server.timeout(req, 0) 来禁用此流的超时。详情请参见
idleTimeout。使用异步生成器
在 Bun 中,new Response 直接接受一个异步生成器函数。这通常是编写 SSE 端点的最简单方法——每次 yield 会向客户端刷新一块数据,如果客户端断开连接,生成器的 finally 块会执行,从而可以清理资源。
使用 ReadableStream
如果您的事件来自回调——消息代理、定时器、外部推送——而不是线性的 await 流,ReadableStream 通常更合适。当客户端断开连接时,Bun 会自动调用流的 cancel() 方法,因此您可以在 start() 中设置的资源进行释放。