使用node express和socket阻止新选项卡中的新连接

时间:2014-12-11 06:59:02

标签: node.js sockets express

停止在node express和socket

中的不同选项卡中创建新连接

我正在开发一个聊天应用程序,它使用node,express和socket在端口3000上运行。

我只想停止在客户端和服务器之间创建套接字连接,如果同一浏览器的其他选项卡匹配相同的网址。

有人可以帮我解决这个问题。我知道我必须使用会话和cookie,但我无法在io.sockets.on中管理会话('连接');

提前致谢。

1 个答案:

答案 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 标志。