2015-01-18 24 views
6

Có cách nào để thực hiện việc này không?Cách nhận id phiên ở phía máy khách? (WebSocket)

phía Chủ đầu tư:

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

Server side là không quan trọng. Sau khi đoạn mã trên đã được thực thi, tôi cần biết id phiên của mình.

Trả lời

2

Để nhận id phiên, chúng tôi cần thực hiện một số thay đổi đối với thư viện SockJS.
Chuỗi

var connid = utils.random_string(8); 

được sử dụng để lấy id của chúng tôi. Vì vậy, chúng ta chỉ cần hoàn thành nó như thế này:

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

và sau đó chúng ta có thể đọc lĩnh vực này từ mã khách hàng:

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

Và nếu chúng ta cần phải biết id phiên trước khi gọi phương thức connect chúng ta có thể sửa đổi hàm tạo và phương thức kết nối của SockJS để sử dụng giá trị được truyền qua máy khách.

5

Bạn có thể lấy nó từ url mà không thực hiện bất kỳ thay đổi nào trong thư viện 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 
    }); 
+0

tôi đã cung cấp một Regular Expression cho phân tích các phiên id ra, trong [của tôi trả lời cho _Spring Websockets @SendToUser mà không cần đăng nhập? _] (http://stackoverflow.com/a/43430736/1847378) – AndrewL

+1

Bạn có biết cái/039/là gì không? – zudduz

3

Các constructor SockJS có một tham số tùy chọn và ở đó bạn có thể vượt qua một máy phát điện id phiên tùy chỉnh như một chức năng:

let sessionId = utils.random_string(8); 
let socket = new SockJS('/socket', [], { 
    sessionId:() => { 
     return sessionId 
    } 
}); 
Các vấn đề liên quan