typescript - Socket.io 为单个请求发送多条消息
我在一个 NodeJS + TypeScript 项目中使用 Socket.io,客户端向服务器发送消息后,服务器会将相同的消息通过 socket 发送回客户端。然而,每次我向服务器发送新消息时,服务器发送回消息的次数会增加 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();
答案#1
通过在点击事件中注册事件处理程序,每次点击发生时都会创建一个新的注册。这将导致所有这些事件处理程序(取决于点击的次数)在服务器发送消息时触发。
简而言之:服务器只发送了一次,你却收到了多次。
答案#2
将套接字接收功能放在按钮点击事件之外是可行的。
$("#send").click(function(){
alert("Sending : " + $("#text").val());
socket.emit("toServer", {
message: $("#text").val()
});
});
socket.on('toClient', function (data) {
alert (data.message);
});
