Socket.io emite datos duplicados después de la actualización del navegador

Tengo una página que tiene un botón. Cuando se hace clic en el botón, obtiene datos a través de socket.io. Sin embargo, cada vez que recargue la página, socket.io enviará una copia adicional de los datos del conjunto de datos anterior. Así que mis datos se verían bien la primera vez que se cargue la página (ejemplo: abcd). Luego, vuelva a cargar la página para recuperar los datos 2n (abcdabcd), vuelva a cargar la página nuevamente, obtengo los datos 3n (abcdabcdabcd), etc.

¿Cómo evito el envío de datos duplicados al cliente cuando se recarga la página? Aquí está mi código.

Lado del servidor:

app.get('/test', function(req, res){ // some code... io.sockets.on("connection", function(socket){ var socketFn = function(data){ socket.emit("trends", { trends: JSON.parse(redisData) }); }; socket.on("action", socketFn); socket.on("disconnect", function(){ socket.removeListener("action", socketFn); // this doesn't work }); }); res.render('test'); }); 

Lado del cliente:

  var socketOpts = { "sync disconnect on unload" : true }; var socket = io.connect("", socketOpts); socket.on("trends", function(data){ // data received from the node server, so do something with it }); function action(){ socket.emit("action", {phrase: "some dummy data"}); return false; } // already checked client side doesn't fire multiple click event $("button#click").off("click").on("click", action); 

Esto se debe a que escuchas la conexión tantas veces como el cliente llega a la página.

 app.get('/test', function(req, res){ //when client opens the page io.sockets.on("connection", function(socket){ //start listening to new connection ... 

Se considera una mala idea inicializar los activadores de eventos de conexión desde sus rutas. Debe hacerse solo una vez globalmente. Aquí, cada vez que su cliente acceda a la página escuchará los eventos tantas veces como se acceda a la página.