繁体   English   中英

服务器发送事件 (SSE) - 自动重新连接

[英]Server sent events (SSE) - automatic reconnect

我无法理解 SSE 的“自动重新连接”如何工作。

我一直在阅读 Mozilla 和 WC3 的文档以及其他一些讨论,但我仍然不确定它是如何工作的。

https://html.spec.whatwg.org/multipage/server-sent-events.html https-事件/文档/WebAPI/sServer.org

我已经在 Golang 中使用 gorilla/mux 实现了 SSE,并且一切正常。 现在到了有趣的部分,我可以断开与服务器的连接,但连接会在几秒钟后神奇地恢复。 我自己没有为此实现任何功能,所以我不确定这是怎么发生的?

所有主流浏览器都会尝试自动重新连接,但我从未手动设置任何事件 ID。 浏览器会重新连接,但不会收到断开连接期间发送的任何丢失数据吗? (这就是使用EventID可以解决的问题,但我对它没有兴趣)。 即,浏览器是否可以在不使用 EventID 的情况下重新连接? 或者是其他什么东西使这种“重新连接”成为可能?

根据规范,客户端必须发送 Last-Event-Id header 来告诉服务器它成功接收到的最后一个事件id 仅当使用具有空值的id字段发送事件时(与仅发送数据和完全省略id不同)Last-Event-Id 在客户端重置(您可以将其视为块交易)。

参见 https 中的第 5 节处理Model://www.w3.org/TR/2009/WD-eventsource-20090421/

如果事件源的最后一个事件 ID 字符串不是空字符串,则 Last-Event-Id HTTP header 必须包含在请求中,其值是事件源的最后一个事件 ID 字符串的值。

稍后在第 7 节解释事件 Stream 中有很好的解释,描述了客户端发送的 Last-Event-Id 如何受事件id的值(和存在)影响的test-stream实际示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM