繁体   English   中英

socket.io在刷新时没有断开连接吗?

[英]socket.io isn't disconnecting on refresh?

我是socket.io的新手,正在尝试使用它创建某种mmo。 但是,我一直遇到一些问题。 当前的一种是,如果有人刷新它,看起来不是在断开先前的套接字? 在我的控制台中,它显示该用户已连接两次,并将为该用户创建另一个监听。

这是我的控制台在刷新3次后的样子:

User has joined : a
in getMap fora
user has disconnected
User has joined : a
User has joined : a
in getMap fora
in getMap fora
in getMap fora
in getMap fora
user has disconnected
user has disconnected
User has joined : a
User has joined : a
User has joined : a

客户端:

  var socket = io();
setUsername();

function setUsername() {
socket.emit('add user', username);
}

socket.on('startMap', function (data) {
socket.emit('getMap');
});

服务器端:

io.on('connection', function (socket) {
    var addedUser = false;

    socket.on('add user', function (username) {
            if (addedUser) return;
// we store the username in the socket session for this client
    socket.username = username;
        addedUser = true;
    console.log("User has joined : " + socket.username)
    socket.emit('startMap',{username:socket.username});

});//end add user

socket.on('getMap', function(){
    console.log("in getMap for" + socket.username);
});
  socket.on('disconnect', function(){
  console.log("user has disconnected");
  });
});

为同一用户刷新11次后:

(node:8808) Warning: Possible EventEmitter memory leak detected. 11       disconnect listeners added. Use emitter.setMaxListeners() to increase limit
(node:8808) Warning: Possible EventEmitter memory leak detected. 11 add user listeners added. Use emitter.setMaxListeners() to increase limit
(node:8808) Warning: Possible EventEmitter memory leak detected. 11 getMap listeners added. Use emitter.setMaxListeners() to increase limit
(node:8808) Warning: Possible EventEmitter memory leak detected. 11 updateMap listeners added. Use emitter.setMaxListeners() to increase limit

您必须在server side监听disconnect事件并进行相应广播

io.on('connection', function (socket) {
    var addedUser = false;

    socket.on('add user', function (username) {
      if (addedUser) return;
    // we store the username in the socket session for this client
      socket.username = username;
          addedUser = true;
      console.log("User has joined : " + socket.username)
      socket.emit('startMap',{username:socket.username});

    });//end add user

    socket.on('getMap', function(){
        console.log("in getMap for" + socket.username);
    });

    socket.on('disconnect' , function(){
        // your action on user disconnect
      socket.broadcast.to(socket.chatroom).emit('user disconnect', name);
    });
});

检查用户何时断开连接。 然后在那做东西,从地图上删除等等。

 let users = new Object(); // Store users io.on('connection', function(socket) { socket.on('disconnect', function() { console.log("User has disconnected: " + users[socket.id]) delete users[socket.id]; // User disconnected, delete from list }); socket.on('add user', function(username) { users[socket.id] = username; // Add user to list console.log("User has joined: " + username); }); }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM