假设你有一个多页面应用程序,你可以在这里做一个技巧,当你的套接字在页面加载时第一次连接时,你可以像这样将会话 ID 分配给那个特定的连接。然后绑定那个连接到那次会议。
io.on('connection', function(socket) {
socket.on('start-session', function(data) {
console.log("============start-session event================")
console.log(data)
if (data.sessionId == null) {
var session_id = uuidv4(); //generating the sessions_id and then binding that socket to that sessions
socket.room = session_id;
socket.join(socket.room, function(res) {
console.log("joined successfully ")
socket.emit("set-session-acknowledgement", { sessionId: session_id })
} else {
socket.room = data.sessionId; //this time using the same session
socket.join(socket.room, function(res) {
console.log("joined successfully ")
socket.emit("set-session-acknowledgement", { sessionId: data.sessionId })
})
}
});
现在您已经将套接字连接绑定到会话,现在您也在客户端发送确认。您可以做的是像这样将会话 ID 存储到 Web 浏览器会话存储中
在客户端代码
socket.on("set-session-acknowledgement", function(data) {
sessionStorage.setItem('sessionId', data.sessionId);
})
这会将会话 ID 存储在浏览器会话存储中。现在,当页面从 page1 导航到 page2 时,依此类推。然后将该会话 ID 发送到服务器,这样您就可以像这样在逻辑上连接到同一个会话
var session_id;
// Get saved data from sessionStorage
let data = sessionStorage.getItem('sessionId');
console.log(data)
if (data == null) {
session_id = null//when we connect first time
socket.emit('start-session', { sessionId: session_id })
} else {
session_id = data//when we connect n times
socket.emit('start-session', { sessionId: session_id })
}
所以基本上背后的逻辑是,我们可以通过这样做为多个套接字连接使用相同的会话,因为每次套接字将仅加入到该特定房间并发出您可以在服务器端监听的事件,反之亦然.