如何在页面刷新时避免新的套接字连接?我有一个游戏,从一个房间的两个插座连接开始,但在游戏中间我刷新页面,游戏进度丢失,如果有新的对手等待新游戏开始。我希望避免这种情况,任何的想法?很乐意帮助,我真的陷入了这个
server.js
function onClientdisconnect() {
console.log('player disconnected with id ' + this.id);
//send message to every connected client except the sender
this.broadcast.to(this.room_id).emit('remove_player', {id: this.id});}
io.on('connection',(socket)=>{
console.log('user connected ' + socket.id);
socket.on('disconnect', onClientdisconnect);
client.js
var socket =io();
// socket connection
socket.on('connect',function(){
socket.emit('new_player_GK',{
id:socket.id
});
console.log('connected');
});
答案 0 :(得分:3)
您不能,当页面关闭(刷新)时,websocket连接会自动关闭。
您必须实现自己的会话逻辑,可能在客户端存储cookie / localStorage数据,并在页面加载时恢复(以前的)客户端数据。
如果您的游戏数据存储在服务器上,则必须实施某种身份验证,以便您知道 游戏数据X 来自 用户Y ,因此当 用户Y (根据Cookie识别)再次加载页面时,服务器会返回其之前的 数据X 。
如果您需要更具体的示例,首先必须解释您希望在页面加载之间保留哪些数据,请记住,无法保持websocket连接。我建议改为让你的游戏更像SPA,这样你就可以完全消除刷新的需要(如果用户有意刷新页面或关闭标签,这仍然无法保持进度)。