Я пытался изучить узел и начал создавать mashup с socket.io Начался транспорт сообщений, но я столкнулся с некоторыми проблемами.Socket.io message event firing несколько раз
Событие сообщения срабатывает несколько раз, что приводит к появлению нескольких сообщений в поле получателя. Я направил сокет на exports.chat
и задавался вопросом, не вызывает ли это проблема?
Чтобы сузить проблему: сообщения запускают количество раз = последовательность подключения клиента. То есть, если клиент подключается второй, его сообщения будут срабатывать дважды. три раза для клиента, подключающегося третьим.
Вот фрагмент кода:
exports.chat = function(io, pseudoArray, req, res){
res.render('chat', {title: 'ChatPanel.'});
var users = 0;
io.sockets.on('connection', function (socket) { // First connection
users += 1;
// reloadUsers(io, users);
socket.on('message', function (data) { // Broadcast the message to all
if(pseudoSet(socket)) {
var transmit = {date : new Date().toISOString(), pseudo : returnPseudo(socket), message : data};
socket.broadcast.emit('message', transmit);
console.log("user "+ transmit['pseudo'] +" said \""+data+"\"");
}
});
socket.set('pseudo', req.session.user, function(){
pseudoArray.push(req.session.user);
socket.emit('pseudoStatus', 'ok');
console.log("user " + req.session.user + " connected");
});
socket.on('disconnect', function() { // Disconnection of the client
users -= 1;
// reloadUsers();
if (pseudoSet(socket)) {
var pseudo;
socket.get('pseudo', function(err, name) {
pseudo = name;
});
var index = pseudoArray.indexOf(pseudo);
pseudo.slice(index - 1, 1);
}
});
});
};
В вашем обработчике разъединения: часть с псевдо.сликом должна находиться внутри обработчика. –