मैं नोड सीखने की कोशिश कर रहा था और 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 वाला हिस्सा गेटर हैंडलर के अंदर होना चाहिए। –