我有一个 Sails.js 应用程序。
每个页面中都可以选择当前设置(在布局中设置)。
我需要能够在所有页面上监听当前更改的事件并通知用户刷新页面。我可以打电话io.socket.on('currentChanged')
在客户端,只需在CurrentController.changed
中运行一个emit即可?或者我是否特别需要监听当前 Controller 并将响应包装在 if(req.isSocket)
中?
我如何确保只通知该用户,而不是所有人?
还有更好的办法吗?我不想向每个监听器添加相同的套接字响应。
我已经查看了堆栈溢出和谷歌,但无法立即为所有页面提供这样的监听器。
编辑:我知道我可以使用req.socket.handshake.sessionID
获取 session ID 。我可以获得原始套接字,但我宁愿采用“sails.js”方式。
另外,在这个 link它建议我可以使用用户 ID 加入房间。我应该在登录时执行此操作
最佳答案
嗯,我已经 answered像这样的问题,但对于你的情况可以这样修改:
您最好为用户创建不同的房间。
创建 Controller :
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
});
}
}
您可以在某个地方创建通知:
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。
关于javascript - 如何在 Sails.js 的所有页面中监听登录用户的套接字更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30552942/