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

我试图学习节点并开始使用socket.io创建一个mashup
消息传输已经开始,但我遇到了一些麻烦.

消息事件多次触发,导致单个消息在收件人的框中多次出现.我已将套接字路由到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函数之外.套接字IO必须与http / app服务器绑定,您不应在每个请求中处理它.

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

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

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

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ "TOC" 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...