Socket.io重复发出第二个窗口

时间:2017-11-11 01:56:29

标签: javascript node.js sockets socket.io vue.js

我正在测试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);
});

2 个答案:

答案 0 :(得分:1)

这是因为您每次有人访问'/'路线时都会创建连接侦听器。尝试将socket-io代码移到'/'路由功能之外。

答案 1 :(得分: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);
  });
});