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

标签 http go server-sent-events

我在理解“自动重新连接”如何用于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/

相关文章:

php - 在通过 HTTP 下载数据之前确定文件大小

http - 如何使用 apache camel 将消息发送到多个目的地?

mysql - 指向 MySQL 查询抽象接口(interface)的指针片段

concurrency - Go编程语言相互并发执行

javascript - 在客户端处理大数据集

signalr - Keepalive 和服务器发送的事件 Signalr

javascript - 如果超过 5 个客户端,Jersey 2.8 SSE 注册会一直等待

java - 在 IBM Domino 中创建重定向的 HTTP 请求的方法

http - 如何在Mule的http请求连接器中动态设置完整的url

sql - golang db.ping()