2017-11-11 221 views
0

我测试socket.io,做一个简单的聊天消息(按照官方网站的教程)Socket.io重复发射的第二个窗口

我开了2个窗口:

当我发出第一个窗口中的事件打开,其正常。

但是,当我在第二个窗口发出事件时,发送事件2次(重复)。

PS:如果我打开第三窗口,该事件发送3次

的Node.js代码:

router.get('/', function(req, res, next) { 

res.render('index', { title: 'Express' }); 

io.on('connection', function(socket) { 
    socket.on('chatMessage', function(msg){ 
    io.emit('chatMessage', msg); 
    }); 
}); 
}); 

客户端:

methods: { 
    sendMessage: function() { 
    socket.emit('chatMessage', this.text); 
} 


socket.on('chatMessage', function(msg){ 
console.log('Client side message: ' + msg) 
vmIndex.messages.push(msg); 
}); 
+1

这是因为你每次有人访问''/''路由时都会创建一个连接监听器。尝试移动“/”路由功能之外的socket-io代码。 –

+0

谢谢。是吗!!添加答案生病upvote并标记为已解决 –

回答

1

这是因为你”每当有人访问'/'路由时重新创建连接监听器。尝试移动'/'路由功能之外的socket-io代码。

1

正如Eric所说的,将您的连接侦听器移动到/路由之外,以防止每次访问该页面时都会创建它。

router.get('/', function(req, res, next) { 
res.render('index', { title: 'Express' }); 
}); 

io.on('connection', function(socket) { 
    socket.on('chatMessage', function(msg){ 
    io.emit('chatMessage', msg); 
    }); 
});