2017-11-11 219 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); 
    }); 
});