停止在node express和socket
中的不同选项卡中创建新连接我正在开发一个聊天应用程序,它使用node,express和socket在端口3000上运行。
我只想停止在客户端和服务器之间创建套接字连接,如果同一浏览器的其他选项卡匹配相同的网址。
有人可以帮我解决这个问题。我知道我必须使用会话和cookie,但我无法在io.sockets.on中管理会话('连接');
提前致谢。
答案 0 :(得分:0)
基于这篇文章。 answer by pr0zac
创建一个快速会话商店,你可以使用redis或其他.... 我们稍后将使用会话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;
}
});
});
}
});
我使用快速会话对象来确定连接的时间戳增量是否小于一半和小时(这可以修改)。 如果确实发生了我接近套接字,否则我将 lastConnected 更新到现在。
socket_client.on('disconnect', function() { ....
在断开连接事件时,我重置了socket上的会话 lastConnected 标志。