我有一个 Web 应用程序,其中需要从服务器到它的客户端(浏览器)的持久连接,以便在(附近)向客户端推送新闻/更新即时的。如果浏览网站的某些元素不会导致完整的页面刷新,这就不会那么棘手。
轮询(标准方式或长轮询)服务器以获取新闻不是一种选择,因为它通常会导致不必要的请求调用(因为没有可用的新闻)。而且消息会随机出现。因此,使用轮询策略,服务器会宕机…… 对于 websocket(双向通信 channel ),客户端和服务器必须接受升级到 websocket。 讨论了类似的问题here , 但没有找到令人满意的解决方案。
通过将数据存储在 cookie 或其他方式中,数据可以在整个页面刷新后继续存在:
- cookies
- window.name (www.thomasfrank.se/sessionvars.html)
- localstorage:存储没有过期日期的数据。数据不会被删除 当浏览器关闭时。示例:毅力 (github.com/viseztrance/perseverance)
- PersistJS:无需 cookie 的跨浏览器客户端持久存储 Javascript 对象是通过序列化/反序列化对象完成的。
是否有类似 websockets 这样“运行”对象的东西?
我想到的一些可能性是:
- 旧式“解决方案”是将整个网络应用程序放在一个 iFrame 中,并将连接添加到(框架的)最外层窗口。这不是一种选择,因为它会导致许多不同的其他问题。
- 自 HTML5 Share Web Workers退出,但由于浏览器支持有限,也无法使用。
所以我的问题是:是否有可能/黑客如何在页面刷新时保持我的 websocket 连接打开?这样我就不必重新初始化与服务器的连接了吗?
最佳答案
简单的答案 - 最好的解决方案是更改您的服务器部分,以便它可以处理连接丢失和恢复(并使用 cookie 来保留“ session ID”或其他内容)。
因为我看不出有任何要求可以从字面上实现这一目标。甚至更多——你可能会失去连接,不是因为 referesh,而是因为连接问题(但你可以弄清楚其中发生了什么)
关于javascript - 即使在页面刷新后,如何保持 Websocket 连接持久?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695836/