断开连接时 socket.io 销毁连接
Destroy socket.io connection when disconnect
我遇到了一个问题,即用户与 socket.io 断开连接并且实例(包括所有事件侦听器)保持活动状态。
下面的两个示例都是由于数百行而导致的进度的部分代码。但是问题仍然存在于此代码。
应用.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;
索引.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 数据库,由于上述问题,请求将发布相同数据的多个副本。
所以问题是,如何防止实例在用户离开页面后保持活动状态?
正如您在每次连接或刷新时所说,您将获得多个connected
字符串输出,这是因为您在每个请求上附加了 socket.io 侦听器。以下是您应该如何在 socket.io 上附加connected
侦听器:
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);
// Your listener should be outside your routes
io.on('connection', function(socket) {
console.log('connected')
});
server.listen(3000, function() {
console.log('listening on *:3000');
});
module.exports = app;
在您的索引上.js只需删除 setUp 函数:
var express = require('express'),
router = express.Router();
router.get('/', function(req, res) {
res.render('home', {
title: 'Home'
});
});
module.exports = router;
相关文章:
- 可以't连接客户端和服务器import.io
- Webrtc和socket.io:createanswer()总是有一个错误.为什么?我的代码连接了两个对等体,但其中只
- socket.io:断开连接事件 - “传输关闭”、“客户端命名空间断开连接”、“传输错误”和“强制关闭”
- 多个 socket.io 客户端连接不起作用(谷歌浏览器,火狐浏览器)
- Socket.IO socket.id 更改同一客户端而不重新连接
- Socket.IO和AngularJS创建多个连接,如何停止
- Node和Socket.io…阻止外部客户端连接
- 是否自动更新套接字连接数据?socket.io
- 如何使用socket IO检查有多少参与者连接到我的聊天室
- 在客户端断开连接时释放事件处理程序 Socket.IO
- socket.io”;“连接”;刷新/重新加载时的事件不会激发
- Socket.io-io.to.emit向所有连接的用户发射
- 如何在自动重新连接超时后重新连接socket.io客户端
- Socket.io检查是否有连接
- socket.io,netty socketio,nginx每分钟断开连接
- 断开客户端与socket.io的连接
- Socket.IO:重新连接导致服务器连接代码运行两次
- 套接字IO未连接到正确的服务器
- node.js/socket.io:重新连接时刷新表
- 断开连接时 socket.io 销毁连接