gpt4 book ai didi

node.js - 使用 Node 表达和套接字防止新选项卡中的新连接

转载 作者:搜寻专家 更新时间:2023-10-31 23:27:18 25 4
gpt4 key购买 nike

停止在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com