javascript - 即使在页面刷新后,如何保持 Websocket 连接持久?

标签 javascript html cookies

我有一个 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/

相关文章:

javascript - 如何防止多次点击按钮?

Javascript:检测碰撞的 div

javascript - 我如何从 Meteor 中的服务器获取浏览器 cookie 以进行 session 处理?

javascript - ng-repeat 上的 AngularJs 过滤器

html - 灵活的盒子布局模型的粘性页脚?

使用两个 chrome 浏览器时,php 应用程序 session 会混淆

Gorilla session 存储在 localStorage 中

javascript - TideSDK 使用 Ajax 调用 PHP 文件

javascript - 图表.js : Controller for Scatter chart doesn't work for draw function

javascript - 使用 Chart.js 创建热图/穿孔卡片