Vov*_*van 5 javascript server-sent-events eventsource
在我们的应用程序中,我们有 SSE 连接,生存时间为 5 分钟,5 分钟后服务器关闭连接,客户端自动重新连接。
\n\n但这里的问题是:当客户端重新连接时,后端可能发生了一些事件,并且它不会传递到SSE连接,因为它\xe2\x80\x99s尚未建立。
\n\n所以有一些 1-2 秒的时间段我们可能会丢失事件。
\n\n我们该如何处理这个案子?你有什么意见 ?
\n\n在我看来,我们只有一个选择:每次 SSE 重新连接后,在服务器上执行额外的 GET 请求来刷新数据。
\n这正是SSE 协议Last-Event-ID
中 HTTP 标头的设计目的。
在服务器端,当您获得新连接时,您应该查找该标头。如果已设置,请立即将丢失的数据间隙传输给他们。您应该id
将推送的每条消息的标头设置为某个唯一标识符。
在客户端,对于您的特定用例,您不需要执行任何操作:当 SSE 重新连接运行时,它会使用它收到的最后一个数据的 id 自动发送该标头。
在我的书《Data Push Apps with HTML5 SSE》的第 5 章中,我认为您还应该在您推出的 JSON 数据包中明确包含相同的唯一 id,并且您也应该支持将其作为Last-Event-ID
POST/GET 参数给出。这使您可以灵活地使用 SSE 的长轮询替代方法,并且还意味着如果重新连接来自客户端而不是服务器端,它就可以工作。(前者将用于支持较旧的浏览器,尽管随着 IE 的消亡,这一点越来越不重要;如果您实现自己的保持活动机制,则需要后者。)