我試圖學習節點並開始創建與socket.io混搭 消息傳輸已經開始,但我遇到了一些麻煩。Socket.io消息事件觸發多次
消息事件觸發多次,導致單個消息在接收者的方框上多次出現。我已經將套接字路由到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);
}
});
});
};
在您的斷開連接處理程序中:帶pseudo.slice的部分應位於getter處理程序中。 –