4
我有一個有一個按鈕的頁面。當按鈕被點擊時,它通過socket.io獲取數據。但是,每次重新加載頁面時,socket.io都會從前一個數據集中發回一個額外的數據副本。所以我的數據在第一次加載頁面時看起來很好(例如:abcd)。然後重新加載頁面將返回2n數據(abcdabcd),再次加載頁面我得到3n數據(abcdabcdabcd)等Socket.io在瀏覽器刷新後發出重複數據
如何避免重複數據發送到客戶端時重新加載頁面?這是我的代碼。
服務器端:
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);
如果我想在我的路由中初始化連接事件偵聽器該怎麼辦?如果我有10頁,只有1我想實現socket.io,該怎麼辦? – miksiii
@miksii仍然是一個壞主意。您創建多個連接處理程序 - 與頁面被擊中的次數相同。頁面命中將會終止你的socket.io服務器。如果您有單獨的問題,請創建一個新問題。我的回答解決了OP的特殊問題。 – user568109
我想知道我是否應該創建一個新的話題。在我的情況下,我有/ dashboard路線呈現dashboard.jade頁面。在該頁面中,我使用socket.io和mongodb進行簡單的聊天應用程序。我注意到,如果我在我的/儀表板路徑中爲套接字設置了編程邏輯,則每次刷新頁面時都會複製數據。例如;如果我發送「abc」,它會發送「abc」,比我刷新頁面併發送「abc」它會發送「abc」,「abc」。對此有何建議? PS。如果您願意,我可以創建一個新問題並作爲答案提出建議。謝謝。 – miksiii