刷新后保持 WebSocket 连接

Keep WebSocket connection alive after refresh

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

这是我的java脚本代码:

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

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

};

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

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

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

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

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

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

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

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

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