[英]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.