2013-12-21 39 views
2

我在NodeJS + Typescript項目中使用Socket.io,客戶端向其服務器發送消息併發送相同的消息,並使用套接字發送回客戶端。但是,每次向服務器發送新消息時,服務器發回消息的次數都會增加1,這並不是我編寫它的工作方式。例如,我第一次發送消息「x」 - 服務器返回消息「x」。下次發送消息時,服務器將返回該消息兩次。下一次它發生三次,直到頁面刷新,當它返回到一次。我不知道出了什麼問題。下面的代碼:Socket.io爲單個請求發送多條消息

客戶:

$("#send").click(function(){ 
     alert("Sending : " + $("#text").val()); 
     socket.emit("toServer", { 
      message: $("#text").val() 
     }); 
     socket.on('toClient', function (data) { 
      alert (data.message); 
     }); 
    }); 

服務器(app.ts):

function startSocket() { 
    var io = require('socket.io').listen(server, {log : false}); 
    io.sockets.on('connection', function (socket) { 
     socket.on('toServer', function (data) { 
      console.log(data); 
      socket.emit('toClient', data); 
     }); 
    }); 
} 

startSocket(); 

回答

3

通過在click事件中註冊事件處理程序,每次點擊發生時都會創建一個新的註冊。這將導致所有這些事件處理程序(取決於您單擊的次數)在服務器發送消息時觸發。

簡而言之:服務器只發送一次,您多次收到它。

0

把套接字接收按鈕點擊事件工作之外的功能。

$("#send").click(function(){ 
     alert("Sending : " + $("#text").val()); 
     socket.emit("toServer", { 
      message: $("#text").val() 
     }); 
    }); 
    socket.on('toClient', function (data) { 
     alert (data.message); 
    });