typescript - Socket.io enviando várias mensagens para uma única solicitação
Estou usando Socket.io em um projeto NodeJS + Typescript, onde o cliente envia uma mensagem para o servidor e a mesma mensagem é enviada de volta para o cliente usando socket. No entanto, toda vez que envio uma nova mensagem para o servidor, o número de vezes que o servidor envia a mensagem de volta aumenta em 1 - o que não é como eu programei para funcionar. Por exemplo, da primeira vez que envio uma mensagem "x" - o servidor retorna a mensagem "x". Da próxima vez que envio uma mensagem, o servidor retorna essa mensagem duas vezes. Na próxima vez acontece três vezes, até que a página seja atualizada, quando volta a uma vez. Não sei o que está dando errado. Aqui está o código:
Cliente :
$("#send").click(function(){
alert("Sending : " + $("#text").val());
socket.emit("toServer", {
message: $("#text").val()
});
socket.on('toClient', function (data) {
alert (data.message);
});
});
Servidor (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();
Resposta #1
Ao registrar o manipulador de eventos dentro do evento de clique, você criaria um novo registro cada vez que o clique ocorresse. Isso levaria a que todos esses manipuladores de eventos (dependendo do número de vezes que você clicou) fossem acionados quando o servidor enviasse a mensagem.
Em resumo: o servidor está enviando isso apenas uma vez, você estava recebendo várias vezes.
Resposta #2
Colocar a função de recebimento do socket fora do evento de clique do botão funciona.
$("#send").click(function(){
alert("Sending : " + $("#text").val());
socket.emit("toServer", {
message: $("#text").val()
});
});
socket.on('toClient', function (data) {
alert (data.message);
});
