我在理解“自动重新连接”如何用于SSE时遇到了麻烦。
我一直在阅读Mozilla和WC3的文档以及其他一些讨论,但是我仍然不确定它是如何工作的。
https://html.spec.whatwg.org/multipage/server-sent-events.html
https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
我已经在Golang中使用 gorilla /mux实现了SSE,并且一切正常。现在到有趣的部分,我可以断开服务器的连接,但是连接将在几秒钟后神奇地恢复。我自己尚未实现任何功能,所以我不确定这是怎么发生的?
所有主要的浏览器都会尝试自动重新连接,但是我从来没有手动设置任何事件ID。浏览器会重新连接,但在断开连接期间不会接收到丢失的数据吗? (这是使用EventID可以解决的问题,但我对此没有兴趣)。即,浏览器可以在不使用EventID的情况下重新连接吗?还是其他原因使得这种“重新连接”成为可能?
最佳答案
根据规范,客户端必须发送Last-Event-Id header ,以告知服务器有关成功接收的上一个事件id
的信息。仅当事件发送为且 id
字段为空值(不同于仅发送数据和完全省略id
时),客户端上的Last-Event-Id重置(您可以将其视为大宗交易)。
请参阅https://www.w3.org/TR/2009/WD-eventsource-20090421/中的5处理模型
If the event source's last event ID string is not the empty string, then a Last-Event-Id HTTP header must be included with the request, whose value is the value of the event source's last event ID string.
稍后在第7节“解释事件流”中对此进行了很好的解释,它描述了
test-stream
的实际示例,说明了客户端发送的Last-Event-Id如何受事件id
的值(和状态)影响。
关于http - 服务器发送的事件(SSE)-自动重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61541750/