如何在客户端获取会话 ID?(WebSocket)

10

有没有办法做到这一点?

客户端:

function connectWebSocket() {
    var socket = new SockJS('/socket');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function (frame) {
        console.log("connected");
    });
}

服务器端并不重要。在执行上述代码后,我需要知道我的会话ID。

3个回答

12

你可以从url获取它,而不需要对SockJS库进行任何更改。

var socket = new SockJS('/mqClient');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
        console.log(socket._transport.url); 
        //it contains ws://localhost:8080/mqClient/039/byxby3jv/websocket
        //sessionId is byxby3jv
    });

1
我在 我的回答_Spring Websockets @SendToUser without login?_ 中提供了一个用于解析会话ID的正则表达式。 - AndrewL
2
你知道/039/是什么吗? - zudduz

9

SockJS构造函数有一个选项参数,您可以将自定义会话ID生成器作为函数传递:

let sessionId = utils.random_string(8);
let socket = new SockJS('/socket', [], {
    sessionId: () => {
       return sessionId
    }
 });

1
为了获取会话 ID,我们需要对 SockJS 库进行一些更改。
该字符串为


var connid = utils.random_string(8);

用于获取我们的 ID。因此,我们只需要像这样完成它:

var connid = utils.random_string(8);
that.sessionId = connid;

然后我们可以从客户端代码中读取此字段。
function connectWebSocket() {
    var socket = new SockJS('/socket');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function (frame) {
        console.log("connected, session id: " + socket.sessionId);
    });
}

如果我们需要在调用connect方法之前知道会话ID,我们可以修改SockJS的构造函数和连接方法以使用客户端传递的值。


1
我有一个问题。Session ID不是在服务器端生成的吗?如何设置SockJS Session ID? - moussesj94

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接