我在NodeJS + Typescript项目中使用Socket.io,客户端向服务器发送消息并发送相同的消息并使用套接字发送回客户端。但是,每次我向服务器发送新消息时,服务器发送消息的次数都会增加1 - 这不是我编程工作的方式。例如,我第一次发送消息“x” - 服务器返回消息“x”。下次发送消息时,服务器会返回该消息两次。下次它发生三次,直到页面刷新,然后返回到一页。我不知道什么是错的。这是代码:
客户端:
$("#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();
答案 0 :(得分:4)
通过在click事件中注册事件处理程序,您将在每次单击发生时创建新注册。这将导致在服务器发送消息时触发所有这些事件处理程序(取决于您单击的次数)。
简而言之:服务器只发送一次,你多次收到它。
答案 1 :(得分:1)
将套接字接收功能置于按钮单击事件之外。
$("#send").click(function(){
alert("Sending : " + $("#text").val());
socket.emit("toServer", {
message: $("#text").val()
});
});
socket.on('toClient', function (data) {
alert (data.message);
});