gpt4 book ai didi

javascript - 如何在 Sails.js 的所有页面中监听登录用户的套接字更新?

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:42 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com