如何在Sails.js中的所有页面上监听login用户的套接字更新?

我有一个Sails.js应用程序。

每个页面中有当前设置的select(在布局中设置)。

我需要能够监听当前更改的事件的所有页面,并通知用户刷新页面。 我可以在客户端调用io.socket.on('currentChanged') ,只需在CurrentController.changed运行一个发射器。 还是我特别需要听当前的控制器,并包裹在一个if(req.isSocket)的响应?

我如何确保只通知用户,而不是每个人?

有没有更好的办法? 我不想为每个监听器添加相同的套接字响应。

我已经看遍了所有的堆栈溢出和谷歌,不能像这样一个听众一次所有的网页。

编辑:我知道我可以使用req.socket.handshake.sessionID获取会话ID。 我可以得到原始套接字,但我宁愿这样'sails.js'的方式。

此外,在这个链接,这表明我可以join一个房间使用用户ID。 我应该这样做login

那么,我已经回答了这个问题,但是对于你的情况可以这样修改:

您最好为用户创build不同的房间。

创build一个控制器:

NotificationsController.js

 module.exports = { subscribe: function(req, res) { // Get userId of user by your method ..... ..... var roomName = 'user_' + userId; sails.sockets.join(req.socket, roomName); res.json({ room: roomName }); } } 

某处你可以创build通知:

 var roomNameForUser = 'user_' + userId; sails.sockets.blast(roomNameForUser, 'currentChanged'); 

在你看来:

 io.socket.on('connect', function(){ io.socket.get('/notifications/subscribe', function(data, jwr){ if (jwr.statusCode == 200){ io.socket.on(data.room,function(obj){ console.log(obj); }); } else { console.log(jwr); } }); }); 

你也必须添加策略config / policies.js,如:

  'NotificationsController': { '*': ['passport', 'sessionAuth'] }, 

当然,如果你使用Passport或者Sails-auth。