如何在浏览器重新加载时避免新的套接字连接?

时间:2018-04-14 21:12:02

标签: node.js socket.io

如何在页面刷新时避免新的套接字连接?我有一个游戏,从一个房间的两个插座连接开始,但在游戏中间我刷新页面,游戏进度丢失,如果有新的对手等待新游戏开始。我希望避免这种情况,任何的想法?很乐意帮助,我真的陷入了这个

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');
});

1 个答案:

答案 0 :(得分:3)

您不能,当页面关闭(刷新)时,websocket连接会自动关闭。

您必须实现自己的会话逻辑,可能在客户端存储cookie / localStorage数据,并在页面加载时恢复(以前的)客户端数据。

如果您的游戏数据存储在服务器上,则必须实施某种身份验证,以便您知道 游戏数据X 来自 用户Y ,因此当 用户Y (根据Cookie识别)再次加载页面时,服务器会返回其之前的 数据X

如果您需要更具体的示例,首先必须解释您希望在页面加载之间保留哪些数据,请记住,无法保持websocket连接。我建议改为让你的游戏更像SPA,这样你就可以完全消除刷新的需要(如果用户有意刷新页面或关闭标签,这仍然无法保持进度)。