javascript - websocket 使用 session ID 重新连接

标签 javascript websocket

我正在为我的应用程序使用 Java 和 Websocket API

这是我面临的问题:

我打开一个 websocket 连接以通过某个服务器进行连接:

ws = new WebSocket(targetURL);

当我使用 ws 发送每条消息时,我总是首先检查 ws 的状态,通过:

if(ws.readyState == 1) {
        ws.send(request);
} else {
        alert("THE CONNECTION IS CLOSED. PLEASE REFRESH YOUR BROWSER.");
}

在客户端和服务器之间的通信过程中,我在我的 EndPoint 中保存了一条信息。但有时,当我想从客户端发送消息时,状态不是 1,这意味着 ws 不再打开(CMIIW)。如果我尝试使用 ws = new WebSocket(targetURL) 再次连接,它将创建一个新连接,因此我的 EndPoint 中的信息会丢失。

所以我的问题是: 有什么方法可以使用 session ID 或任何其他唯一 ID 重新连接已关闭的 Websocket 连接,以便可以保留我的 EndPoint 中的信息?

谢谢

最佳答案

WebSockets 使用 HTTP 握手,它将发送他们为该来源拥有的任何 cookie。因此,一种方法是为您的客户分配一个 cookie,他们将在连接时转发它。如果您使用的框架允许,您甚至可以在握手响应中设置 cookie。您可以在连接时使用该 cookie 来计算 ID,或者如果没有 cookie 则分配一个新的 ID。

其他选项是创建例如您自己的“hello”协议(protocol),浏览器必须在启动前发送一个特殊命令,指示其 ID(如果有),或者如果是第一次,则只是一个空 ID。

但是除了 cookie 之外,没有内置的机制。

关于javascript - websocket 使用 session ID 重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23002981/

相关文章:

javascript - 复制 div 和他的样式到新窗口

javascript - 固定顶部导航栏的变体

javascript - 使用 Websockets 的同步请求

websocket - ICE对流中的组件1失败

node.js - 如何在 Flutter 中使用 WebSockets 和 Socket.IO?

java - 如何减少 Gwt 多入口点项目应用程序中的初始加载时间

带有原型(prototype)的 JavaScript 继承—— 'constructor' 属性?

javascript - 有没有办法在 JavaScript 中通过 SFTP 创建到服务器的连接?

javascript - WebSockets 和文本编码

javascript - Vue JS 计算属性不重新计算