我的页面上有一个区域,当数据库更改时,消息会发送到该区域。现在,几天后数据库将发生巨大变化,以致每隔10分钟就会显示一条新消息。其他日子只会改变几次。我遇到的问题是EventSource似乎在1小时22分钟后超时,浏览器将不再接收通知。
我想知道是否有一种方法可以保持EventSources持久(即,只要浏览器显示页面,EventSource就会保持活动状态)。根据我在Google搜索中发现的信息,EventSources应该保持活动状态,直到关闭选项卡/窗口。不幸的是,在Google搜索中找不到的东西非常少,对我而言似乎并非如此。
您无需说明套接字关闭发生的位置(在浏览器上,客户端计算机上的套接字,服务器端的套接字等),但实际上并不重要,因为所有修复方法都相同:send keep -活动消息。
服务器应发送一个保持活动消息。每15秒一次;或仅在15秒钟不活动之后。(对于您而言,这在服务器端更容易编码。)它可以像SSE注释一样简单:“:\ n \ n”(以冒号开头的行将被忽略)。我更喜欢发送实际数据,因为:
在客户端,运行setTimeout()
设置为20秒的计时器。每次您从服务器收到任何数据(无论是真实数据还是保持活动状态)时,请终止计时器,然后重新启动。因此,只有当您的服务器超过20秒而不发送任何内容时,才会调用超时功能。发生这种情况时,请终止连接并重新连接。
以上假设问题出在套接字级别。问题可能是浏览器崩溃了:也许它的内存不足了。在这种情况下,我要做的修复是每小时一次计时器(setTimeout()
在JavaScript中),以手动关闭并重新打开EventSource
连接。或者清除一些您可能正在使用的内存缓冲区。使用FireBug或Chrome工具进行一些性能分析会告诉您是否存在内存问题。
插件:在我即将上线的SSE书籍中,“提高应用程序的生产质量”一章中有一半以上是关于保持活动并在重新连接上使用LastId的。出来的时候请买:-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句