SSE (EventSource) 在 1 小时 22 分钟后超时。有什么办法可以让它持续下去吗?

2024-05-01

我的页面中有一个区域,当数据库发生更改时,消息将发送到该区域。现在,有时数据库会发生很大的变化,以至于每 10 分钟就会显示一条新消息;其他日子它只会改变几次。我遇到的问题是 EventSource 似乎在 1 小时 22 分钟后超时,浏览器将不再收到通知。

我想知道是否有一种方法可以保持 EventSource 持久(即,只要浏览器显示页面,EventSource 就处于活动状态)。根据我在 Google 搜索中发现的内容,EventSources 应保持活动状态,直到选项卡/窗口关闭。不幸的是,我在谷歌搜索中找到的东西似乎很少,对我来说,情况似乎并非如此。


您没有说明套接字关闭发生在哪里(在浏览器上、客户端计算机上的套接字、服务器端的套接字等),但这并不重要,因为所有这些的修复方法都是相同的:send keep - 活跃消息。

服务器应发送一条保持活动消息。要么每隔 15 秒;或仅在 15 秒不活动后。 (对于您来说,服务器端编码更容易。)它可以像 SSE 注释一样简单:“:\n\n”(以冒号开头的行将被忽略)。我更喜欢发送实际数据,因为:

  • 您会看到一条消息,允许客户端保持活动检查(见下文)
  • 您肯定想要发送一些有用的内容,例如时间戳(用于检查客户端/服务器时钟是否同步)或指标等。

在客户端,运行一个计时器setTimeout()设置为 20 秒。每次您从服务器收到任何数据(无论是真实数据还是您的保持活动数据)时,请终止计时器并重新启动它。因此,只有当您的服务器超过 20 秒没有向您发送任何内容时,才会调用超时函数。发生这种情况时,请终止连接并重新连接。

上面假设问题出在套接字级别。问题可能是浏览器崩溃:可能内存不足。在这种情况下我要做的修复是一个每小时一次的计时器(setTimeout()在 JavaScript 中),手动关闭并重新打开EventSource联系。或者清除您可能正在使用的一些内存缓冲区。使用 FireBug 或 Chrome 工具进行一些分析会告诉您是否存在内存问题。

Plug:在我即将出版的 SSE 书中,“提高应用程序的生产质量”章节中超过一半的内容是关于保持活动状态以及在重新连接时使用 LastId 的。出来后请购买:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSE (EventSource) 在 1 小时 22 分钟后超时。有什么办法可以让它持续下去吗? 的相关文章