可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Is there any way to do this?
Client side:
function connectWebSocket() { var socket = new SockJS('/socket'); stompClient = Stomp.over(socket); stompClient.connect({}, function (frame) { console.log("connected"); }); }
Server side is not important. After the code above has been executed I need to know my session id.
回答1:
You can get it from url without making any changes into SockJS library.
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 });
回答2:
The SockJS constructor has an option parameter and there you can pass a custom session id generator as a function:
let sessionId = utils.random_string(8); let socket = new SockJS('/socket', [], { sessionId: () => { return sessionId } });
回答3:
To get session id we need to make some changes into SockJS library.
The string
var connid = utils.random_string(8);
is used to get our id. So, we need only complete it like this:
var connid = utils.random_string(8); that.sessionId = connid;
and then we can read this field from the client code:
function connectWebSocket() { var socket = new SockJS('/socket'); stompClient = Stomp.over(socket); stompClient.connect({}, function (frame) { console.log("connected, session id: " + socket.sessionId); }); }
And if we need to know session id before calling connect method we can modify SockJS' constructor and connect method to use client-passed value.