【发布时间】:2023-10-14 10:29:01
【问题描述】:
我正在使用没有 spring security 的 stomp 和 sockjs 使用 spring websockets。当我在浏览器中有一个我的应用程序时,会建立新的套接字连接,但是当我在同一个浏览器中打开另一个选项卡时,它也会创建新的套接字连接。所以我想停止这种行为并希望它使用相同的连接 ID在打开新标签时。它是一个聊天应用程序。使用此博客中的代码:
https://github.com/salmar/spring-websocket-chat
谁能给我工作代码如何在本地存储中存储连接 n 从本地存储中检索新选项卡中存储的套接字连接?
function connect() {
var socket = new SockJS('/spring-mvc-java/chat');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/messages', function(messageOutput) {
showMessageOutput(JSON.parse(messageOutput.body));
});
});
}
【问题讨论】:
-
您需要存储该连接 ID,以便可以跨选项卡共享它。
LocalStorage是最简单的解决方案。 -
你能给我提供任何示例链接吗?
-
好的,假设您有连接 ID
id_1,那么您可以使用localStorage.setItem('conId', 'id_1')将其存储在 LocalStorage 中,要在另一个选项卡中获取此 ID,您可以使用localStorage.getItem('conId')。使用此 ID,您必须使用此保存的连接 ID 在选项卡中打开新的 WebSocket 连接。 -
好的,谢谢,连接 id id_1 你在这里指的是用户的 websocket 会话 id?
-
无论您使用什么来识别不同的会话,它都可能是一个请求参数,只是一个路径变量或标头。
标签: spring websocket stomp sockjs