gpt4 book ai didi

javascript - EventSource 重新连接时丢失了一些 Server Sent 事件

转载 作者:行者123 更新时间:2023-11-30 13:50:35 24 4
gpt4 key购买 nike

在我们的应用程序中,SSE 连接的生存时间为 5 分钟,5 分钟后服务器关闭连接,客户端自动重新连接。

但这里的问题是:当客户端重新连接时,后端可能发生了一些事件并且它不会传递给 SSE 连接,因为它尚未建立。

所以有一些时间段 1-2 秒,我们可能会丢失事件。

我们如何处理这种情况?你怎么看?

在我看来,我们只有一个选择:在每次 SSE 重新连接后,在服务器上执行额外的 GET 请求以刷新数据。

最佳答案

这正是 the SSE protocol 中的 Last-Event-ID HTTP header 的内容专为。

在服务器端,您应该在获得新连接时查找该 header 。如果已设置,请立即将丢失的数据间隙传输给他们。并且您应该为您推送的每条消息设置 id header ,并将其设置为某个唯一标识符。

在客户端,对于您的特定用例,您无需执行任何操作:当 SSE 重新连接运行时,它会使用它收到的最后一个数据的 ID 自动发送该 header 。

在我的《使用 HTML5 SSE 的数据推送应用程序》一书的第 5 章中,我认为您还应该明确地在您推送的 JSON 数据包中包含相同的唯一 ID,并且您应该支持 Last-Event- ID 也作为 POST/GET 参数给出。这使您可以灵活地使用 SSE 的长轮询替代方法,并且还意味着如果重新连接来自客户端而不是服务器端,它也可以工作。 (前者用于支持较旧的浏览器,尽管随着 IE 的消亡,这变得越来越不重要;如果您实现自己的保持事件机制,则需要后者。)

关于javascript - EventSource 重新连接时丢失了一些 Server Sent 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58335110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com