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 分钟后超时。有什么办法可以让它持续下去吗? 的相关文章

随机推荐

  • HTML 5

    尽管开放视频标准似乎处于某种危险之中 但它是一个好主意 我看到了一些关于运动跟踪的演示 只是概念验证 但仍然很有趣 现在 我想说像这样的概念really如果能够访问用户的网络摄像头 这将是一种收获 想象一下 双手举在半空中浏览 Flickr
  • Stripe 订阅 Webhook 缺少元数据和 client_reference_id

    我在将 stripe webhook 链接到客户时遇到问题 因为我通常使用 client reference id 或元数据字段 但是订阅 webhook 似乎没有这些字段 例如事件结帐 会话 完成确实包含 client reference
  • Flask_dance:如果没有关联用户,则无法获取 OAuth 令牌

    我想将 Flask dance 与我的应用程序一起迁移 以使用户授权使用谷歌和其他社交网络 我收到此错误 Cannot get OAuth token without an associated user 在我在蓝图和 sqlalchemy
  • Dart 将客户端 Socket 升级为 WebSocket

    Since WebSocket https api dartlang org stable 2 1 0 dart io WebSocket class html在 Dart 中不允许直接设置安全上下文 https api dartlang
  • Windows 上的 npm run start 出现“DEBUG=*”问题

    name apokidsi version 0 717 contributors dependencies angular 1 5 8 angular cookies 1 5 8 angular messages 1 5 8 angular
  • 是否可以将 ServiceStack.Text.JsConfig 设置范围限制为您的库?

    我正在编写一个使用的自定义库ServiceStack Text https github com ServiceStack ServiceStack Text内部 使用我的其他库也可能使用 ServiceStack Text 我想改变一些J
  • 大熊猫群体中的百分位排名

    我不太清楚如何编写函数来完成分组百分位数 我将 1985 年至 2012 年的所有球队都放在一个数据框中 前 10 个如下所示 目前按年份排序 我想给一个百分位LgRnk分组依据Year 例如 1985 年的 23 LgRank 最差球队
  • 将 BeanFactory 注入 Bean

    我想注入一个SpringBeanFactory到由同一个创建的 BeanBeanFactory有什么办法可以这样做吗 顺便说一句 我正在开发一个网络应用程序 如果没有 我知道我可以通过以下方式获得 BeanFactoryRequestCon
  • React Native 中的 ListView 网格

    我正在 React Native 中构建一个简单的应用程序 它从远程 JSON 源获取列表并将其显示在屏幕上 到目前为止 使用优秀的example http www raywenderlich com 99473 introducing r
  • tampermonkey 脚本跨多个页面运行

    这是我想做的一个例子 每当我们位于目标网址 即 stackoverflow 时 底部就会出现一个带有按钮的粘性页脚 在搜索中输入内容的按钮之一是提交表单 之后 它等待页面加载并执行刚刚加载的页面的操作 即单击第一个链接 我发现仅在提交后单击
  • 为什么 Redshift 在加入时会自动修剪 varchar 列?

    我在使用 Redshift 时遇到了独特的问题 请参阅下面的说明性示例 drop table if exists joinTrim temp1 create table joinTrim temp1 rowIndex1 int charTo
  • 获取正在运行的程序的属性

    我想开发一个程序 其 ID 是一张牌 因为它在另一个正在运行的程序 例如扑克或红心游戏或其他程序 中播放 我首先尝试获取有关已运行的游戏程序的所需信息 但我从一开始就遇到了问题 我正在运行 MSVC 2013 并开发 MFC 应用程序 现在
  • Safari 中的日期无效

    alert new Date 2010 11 29 chrome ff 对此没有问题 但 safari 会喊 无效日期 为什么 编辑 好的 根据下面的评论 我使用了字符串解析并尝试了这个 alert new Date 11 29 2010
  • 如何使用speakhere示例中的AQRecorder

    我已经从 talkHere 示例中复制了 AQRecorder 以及所有其他所需的文件 这样做之后 由于编译错误 我将链中使用它的所有类重命名为 mm 现在似乎已解决 但是我仍然不知道如何使用 AQRecorder 类 该示例中还有另一个名
  • Java 8 不兼容类型

    这是简单的代码 import java util ArrayList import java util Collections import java util HashMap import java util Map public cla
  • 我们如何从团队项目中的所有 Git 存储库连接到 TFS?

    我正在运行最新的 Visual Studio 2013 Ultimate 和 Update 1 我们也有最新的 Team Foundation Server 2013 我们中的一些人对新的 Git 存储库集成感到非常兴奋 但似乎有一个相当大
  • 使用 Java 中的映射实现的队列数据结构,大小限制为 5

    我有带有一些记录的地图 我想将该映射限制为仅 5 个元素 并且每当添加新元素时 应删除第一个元素 并应在映射的最后位置添加新元素 类似于 FIFO 的东西 任何人都可以建议我使用一个数据结构或解决方案本身 E g Map
  • 苹果拒绝应用程序,因为它在未经用户许可的情况下传输 MAC 地址

    我们最近开发的一款应用程序被苹果拒绝了 这是他们的解释 我们发现您的应用在收集数据之前未征得用户同意 根据应用程序商店审查指南的要求 用户的个人数据 具体来说 您的应用程序会发送设备的 MAC 地址 而无需 用户的许可 您的应用程序还会发送
  • 检测 Chrome 打包应用程序中的底层操作系统

    既然打包的应用程序可以在不同的平台上运行 那么有没有办法区分Windows和Mac呢 I would like to show some help vis vis keyboard shortcuts and being able to d
  • SSE (EventSource) 在 1 小时 22 分钟后超时。有什么办法可以让它持续下去吗?

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