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

ios – 浏览器刷新后,Socket.io会发出重复数据,第1张

概述我有一个有按钮的页面.单击该按钮时,它将通过socket.io获取数据.但是,每次重新加载页面时,socket.io都会从先前的数据集中发回一个额外的数据副本.所以我的数据在第一次加载页面时看起来很好(例如:abcd).然后重新加载页面将获得2n数据(abcdabcd),重新加载页面我得到3n数据(abcdabcdabcd)等. 如何在页面重新加载时避免重复数据发送回客户端?这是我的代码. 服务器 我有一个有按钮的页面.单击该按钮时,它将通过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);
解决方法 这是因为您在客户端点击页面时多次收听连接.

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

从路由中初始化连接事件侦听器被认为是一个坏主意.它应该只在全球范围内完成一次.每次客户端访问页面时,它都会在访问页面时多次监听事件.

总结

以上是内存溢出为你收集整理的ios – 浏览器刷新后,Socket.io会发出重复数据全部内容,希望文章能够帮你解决ios – 浏览器刷新后,Socket.io会发出重复数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1041368.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存