将socket.io套接字与express.js会话匹配

时间:2015-04-06 23:02:06

标签: javascript node.js express socket.io real-time

我试图将前端服务器连接到我们的通知服务,然后将前端服务器连接到浏览器。通知服务是实时的,并且在发送的通知数据中包括收件人用户ID。我发送数据的通知服务和接收数据的前端服务器没有问题。我可以让它连接并断开与浏览器的连接,就像这样:

io.on('connection', function (socket) {
  console.log('connected');

  socket.on('disconnect', function () {
    console.log('disconnected');
  });
});

我现在需要知道哪些用户已登录到前端服务器,因此我知道将通知发送到哪个用户/套接字。如果我将连接侦听器放在像这样的中间件函数中,我们可以从快速会话中获取这些数据:

var allClients = {};

function useSocket (req, res, next) {
  io.on('connection', function (socket) {
    allClients[req.session.userId] = socket;

    socket.on('disconnect', function () {
      console.log('disconnected');
      allClients[req.session.userId].removeAllListeners();
      // we were also suggested things like socket.close() which did not help
    });
  });
  next();
}
app.get('*', useSocket, function (req, res){
  res.render('../views/index');
});

除了上面的代码在每次浏览器刷新时创建一个新连接,因此用户会在任何浏览器已连接的情况下获得欺骗通知。

这是我与通知服务对话的代码:

var notificationServiceSocket = require('socket.io-client').connect(notificationServiceUrl);

notificationServiceSocket.on('notification', function (data) {
  // data.user_id is the intended recipient

});

如何在不创建无限连接的情况下确定哪个套接字与收件人相关?

0 个答案:

没有答案