将一个socket.io套接字与一个express.js会话进行匹配

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

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

我现在需要知道用户login到前端服务器,所以我知道哪个用户/套接字发送通知。 如果我把连接监听器放在一个中间件函数中,我们可以从我们的快速会话中获取这些数据:

 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'); }); 

除了上面的代码在每个浏览器刷新上创build一个新的连接,所以用户可以获得任意浏览器连接次数的延迟通知。

这是我的通知服务的代码:

 var notificationServiceSocket = require('socket.io-client').connect(notificationServiceUrl); notificationServiceSocket.on('notification', function (data) { // data.user_id is the intended recipient }); 

我怎样才能确定哪个套接字与收件人没有创build无限连接?