I tried to find out node and started creating mashup with socket.io Message transport started, but I ran into some problems.
The message event is triggered several times, which leads to the appearance of one message that appears several times in the recipient field. I directed the socket to exports.chat and wondered if this caused a problem?
To narrow down the problem: messages run the number of times = client connection sequence. That is, if the client connects second, his messages will be triggered twice. three times for a third-party client.
Here is the code snippet:
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); } }); }); };
source share