一个Server-Sent Events会以任何方式过载浏览器吗?

3
我正在参与一个项目,该项目使用SSE方法每0.5秒从服务器向浏览器推送数据。它从Mysql中获取数据并将其转换为JSON格式发送到浏览器。
我在思考一个极端的情况,即浏览器将工作数月(这是可能的)。服务器每天向浏览器发送2,764,800个JSON。这将是每月82,944,000次推送。
所以,在这种情况下是否需要担心什么?我的意思是,是否有任何方式会导致浏览器或客户端系统因如此大量的数据而过载?
是否有任何场景可以证明每X秒刷新页面是合理的?
1个回答

1

如果没有更具体的细节,答案可能是“可能不需要刷新页面”。

据我所知,在SSE方面没有特定的限制。因此,在从服务器接收数据项、更新div中的值并且不存储接收到的数据的典型示例中,内存应该不会增长。每秒两次也可以。

如果您正在存储数据(例如绘制最后N个值的图形),则需要确保定期丢弃早于最后N个值的数据。

我的担忧是在其他地方:

  • 浏览器漏洞
  • Javascript内存管理。(例如,意外的循环依赖关系,垃圾收集器无法处理。)(这里是一个很好的讨论主题;另一个在这里。)
  • 不可靠的互联网-沿途某个服务器或路由器决定关闭长时间打开的套接字。(SSE应该会在发生这种情况时自动重新连接-我更喜欢在其上添加一些保持活动消息,因为有时套接字会被不干净地关闭。)

您还可以问自己人们会保持他们的浏览器多长时间,并且是否这甚至是您需要担心的事情。

在交易应用程序中,我发现市场关闭(无论是每日还是星期五晚上)是有意关闭套接字的好时机。


嗨Darren,这是一个医院应用程序(因此,24/7小时)。它在内部网络中运行。我正在使用LEMP堆栈。每0.5秒钟,会对数据库进行查询以获取信息,并通过SSE - JSON发送给客户端。数据库从常规表单和物联网设备接收数据。目前,它仅显示一些字段,即在数据库中更改的字段。但下一步将是实时显示图表(如交易应用程序)。我放置了一个来自php的时间(时钟),以向用户显示与服务器的连接正在运行并且数据已更新。 - IgorAlves
如果时钟停止了,那么连接可能出了问题。我创建了一个代码,每60秒刷新页面,以确保连接已经建立并正常工作。 - IgorAlves
你能更好地解释一下你的第二点 - "Javascript内存管理"吗? - IgorAlves
我添加了几个链接。通常情况下,JavaScript 中的内存泄漏并不重要,因为页面的生命周期很短,但如果一个页面将持续打开数小时或数天,则可能会影响到您。(例如,如果每次 SSE 数据到达时您认为自己在创建局部变量,但实际上却创建了全局变量...) - Darren Cook
我建议您找到一种方法,在大约24小时左右重新启动客户端。 - Secto Kia
@SectoKia(您可能是想在原始问题上发表评论吧?)这是基于经验得出的结论吗?如果是,能否分享一些细节(更新频率、大小、浏览器/操作系统组合等)导致24小时后出现问题的情况? - Darren Cook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接