我不明白SSE的 "自动重新连接 "是如何工作的。
我一直在阅读Mozilla和WC3的文档以及其他一些讨论,但我仍然不知道它是如何工作的。
https:/html.spec.whatwg.orgmultipageserver-sent-events.html。https:/developer.mozilla.orgen-USdocsWebAPIServer-sent_events。
我已经在Golang中使用gorillamux实现了SSE,一切正常。现在到了有趣的部分,我可以中断与服务器的连接,但几秒钟后连接会神奇地恢复。我自己还没有实现任何功能,所以我不清楚这是怎么发生的?
所有主要的浏览器都会尝试自动重新连接,但是我从来没有手动设置任何事件ID。浏览器会重新连接,但只是没有收到断开连接时发送的任何丢失的数据吗?这就是使用EventID可以解决的问题,但我对此没有兴趣)。即,如果不使用EventID,浏览器能否重新连接?或者说,会不会是其他什么原因使这个 "重新连接 "成为可能?
根据规范,客户端必须发送Last-Event-Id头来告诉服务器最后的事件。id
它成功地收到了。只有当事件被发送 与 id
字段为空(不同于只发送数据,而忽略了 id
完全)在客户端重置最后一个事件的ID(你可以把它看作是块交易)。
参见第5节处理模型中的 https:/www.w3.orgTR2009WD-eventsource-20090421
如果事件源的最后一个事件ID字符串不是空字符串,那么请求中必须包含一个Last-Event-Id HTTP头,其值就是事件源最后一个事件ID字符串的值。
在后面的第7节解读事件流中有很好的解释,描述了在 test-stream
关于客户端发送的Last-Event-Id如何受到事件值(和存在)的影响的实际例子。id
.