停止在 node express 和 socket 的不同选项卡中创建新连接
我正在开发一个聊天应用程序,它使用 node、express 和 socket 在端口 3000 上运行。
如果同一浏览器的其他选项卡访问相同的 url,我只想停止在客户端和服务器之间创建套接字连接。
有人可以帮我解决这个问题吗?我知道我必须使用 session 和 cookie,但我无法在 io.sockets.on('connection'); 中管理 session
提前致谢。
最佳答案
基于这篇文章。 answer by pr0zac
创建一个 express Session Store ,你可以使用 redis 或其他任何东西...... 我们稍后将使用 session cookie
//better to use redis store
MemoryStore = require('connect/middleware/session/memory'),
var session_store = new MemoryStore();
app.configure(function () {
app.use(express.session({ store: session_store }));
});
关于连接事件处理程序
var connect = require('connect');
io.on('connection', function(socket_client) {
var cookie_string = socket_client.request.headers.cookie;
var parsed_cookies = connect.utils.parseCookie(cookie_string);
var connect_sid = parsed_cookies['connect.sid'];
if (connect_sid) {
session_store.get(connect_sid, function (error, session) {
if(session.lastConnected - Date.now() < HALF_HOUR) {
socket_client.close()
} else {
session.lastConnected = Date.now()
}
});
socket_client.on('disconnect', function () {
if (connect_sid) {
session_store.get(connect_sid, function (error, session) {
// reset lastconnected
session.lastConnected = 0;
}
});
});
}
});
我正在使用快速 session 对象来确定连接的时间戳增量是否小于半小时(可以修改)。 如果确实发生了,我会关闭套接字,否则我会将 lastConnected 更新到现在。
socket_client.on('disconnect', function() { ....
在断开连接事件上,我重置了套接字上的 session lastConnected 标志。
关于node.js - 使用 Node 表达和套接字防止新选项卡中的新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27417071/