我遇到了用戶斷開socket.io並且實例保持活動狀態(包括所有事件偵聽器)的問題。斷開連接時銷燬socket.io連接
以下兩個示例都是由於數百行而導致的進度的部分代碼。但是這個問題仍然存在。
app.js例如:
var express = require('express'),
app = express(),
routes = require('./routes/index'),
server = require('http').createServer(app);
io = require('socket.io').listen(server);
app.engine('handlebars', exphbs({ defaultLayout: 'main' }));
app.set('view engine', 'handlebars');
app.use('/', routes);
server.listen(3000, function() {
console.log('listening on *:3000');
});
module.exports = app;
index.js路線例如:
var express = require('express'),
router = express.Router();
router.get('/', function(req, res) {
res.render('home', {
title: 'Home'
});
setupSocket(req);
});
function setupSocket(req) {
io.on('connection', function(socket) {
console.log('connected')
});
}
module.exports = router;
這將導致:
第一連接:
connected
第二連接:
connected
connected
三方面:
connected
connected
connected
等。這將繼續在頁面重新加載,新選項卡,新瀏覽器或其他任何其他內容,直到我重新啓動節點服務器。
在我的代碼中,我將數據從客戶端發佈到mongo數據庫,並且由於上述問題,請求會發布相同數據的多個副本。
所以問題是,如何防止實例在用戶離開頁面後保持活動狀態?
可能重複:http://stackoverflow.com/questions/5048231/force-client-disconnect-from-server-with-socket-io-and-nodejs – Jer
謝謝,不幸的是,這並沒有解決問題,我運行'socket.on('disconnect',function() {socket.disconnect();});'但是當我重新加載頁面時,它仍然保持堆疊'連接'在控制檯中 –