浏览器刷新后,Socket.io会发出重复的数据

我有一个有一个button的页面。 点击button时,它通过socket.io获取数据。 但是,每次我重新加载页面时,socket.io都会从以前的数据集中发回一个额外的数据副本。 所以我的数据看起来第一次页面加载(例如:abcd)。 然后重新加载页面将返回2n数据(abcdabcd),再次刷新页面我得到3n数据(abcdabcdabcd)等

如何避免在重新加载页面时将重复的数据发送回客户端? 这是我的代码。

服务器端:

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'); }); 

客户端:

  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); 

       

网上收集的解决方案 "浏览器刷新后,Socket.io会发出重复的数据"

那是因为你听客户端点击页面的连接次数。

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

从路由中初始化连接eventlisteners被认为是一个坏主意。 全球只能做一次。 在这里,每当你的客户端访问页面,就会多次访问这个页面。