gpt4 book ai didi

javascript - Socket.io 消息事件多次触发

转载 作者:数据小太阳 更新时间:2023-10-29 04:37:04 25 4
gpt4 key购买 nike

我正在尝试学习 node 并开始使用 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);
}
});
});
};

最佳答案

socket.io 代码的整个部分必须在 external.chat 函数之外。 Socket IO 必须与 http/app 服务器绑定(bind),你不应该在每个请求中处理它。

the messages are firing the number of times = the sequence of connection of the client

本质上发生的是,每次新请求到达时,您都会为消息注册一个事件处理程序,因此它会在您访问聊天 URL 时触发多次。

io.socket.on('message', function (data) {...})

关于javascript - Socket.io 消息事件多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19162582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com