【问题标题】:Keep WebSocket connection alive after refresh刷新后保持 WebSocket 连接处于活动状态
【发布时间】:2018-11-19 18:57:17
【问题描述】:

我有一个在 java spring 服务器和浏览器之间使用 WebSockets 的实时应用程序。有没有一种方法可以在页面刷新后保持 Websocket 连接处于活动状态?

这是我的 javascript 代码:

consumerWebSocket = new WebSocket("wss://" + window.location.host + 
"/myWebSocketConnection");

consumerWebSocket.onopen = function () {
    sendThroughWS(consumerWebSocket, "Send this message from browser to server");

};

【问题讨论】:

    标签: javascript websocket spring-websocket


    【解决方案1】:

    不,你不能。问题是 websocket 所在的上下文仅限于您正在显示的页面。一旦您刷新页面或导航到另一个页面,上下文(以及 websocket)就会被破坏。

    防止破坏的解决方案是创建某种单页应用程序。新内容将加载到现有页面中,并且不会重新加载 websocket。

    另一种方法是使用框架。您可以将 Websocket 放在(隐藏的)框架中,然后使用另一个框架进行导航。这样,套接字可以保持活动状态,您可以在页面的其余部分导航,而无需重新加载 websocket。

    【讨论】:

    • @Holget - 隐藏框架很有趣。你能举一个例子来说明如何在隐藏框架内保持一个套接字吗??
    【解决方案2】:

    1.每次刷新时都会创建新的套接字连接 问题不是新的套接字,而是应用程序的其余部分会使用这个新的套接字连接与您的客户端或以前的连接进行通信吗??

    以上就是要解的谜题, 告诉应用程序的其余部分 嘿:忘记我的上一个连接实例,改用这个新的

    1. 您的聊天应用程序上的通信或应使用您选择的用户 ID 或用户/朋友关系保存在数据库中的任何内容

    2. 有时,将套接字连接的引用存储到某种持久层 Redis 可能很重要,即使在其他数据库上也可以。 在连接关闭时将该实例引用标记为关闭 在刷新时你有新的套接字,然后更新你的持久层上的套接字实例引用(某种数据库)

    3. 一旦您的应用程序想要向您发送消息,它就会通过数据库,如果他们找到对您的套接字连接的开放引用,那么套接字将用于向您发送消息 如果没有引用或关闭,则文本/消息存储在数据库中。

    4. 当您刷新网页或连接新套接字时,客户端浏览器应通过该套接字从后端从数据库请求聊天/消息 => 请注意分页,不要在一个请求中加载文本音调

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 2014-08-19
      • 2021-06-11
      • 2017-05-03
      • 2021-09-13
      • 2013-08-27
      • 2019-09-01
      • 1970-01-01
      相关资源
      最近更新 更多