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

标签 javascript node.js sockets socket.io sails.js

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

相关文章:

php - 如何使用 jQuery、PHP 和 MySQL 实现聊天?

javascript - ExtJS 6.7 现代 - Ext.grid.Tree selectOnExpander 在节点加载时不起作用

javascript - jquery加载脚本冲突

javascript - 在javascript中声明一个变量并在html中使用

javascript - 是否可以在多个域上运行 Facebook 应用程序?

javascript - 在 View 中迭代 JSON

node.js - 从服务器 `socket.io` 触发 (`node.js` 事件),而不是从客户端

javascript - 使用 v4.2.6 时参数中带有文字对象的 NodeJS 构造函数

javascript - 向本地 NodeJS 服务器发出 POST 请求时,AngularJS CORS 错误

Python rpyc "socket.error: [Errno 113] No route to host"