javascript - Sails js 订阅 groupid 属性范围内的模型更改

标签 javascript socket.io sails.js publish-subscribe

我有一个名为 Groupfeed 的模型,如下所示

module.exports = {

  schema:true,
  attributes: 
  {
    groupid:
    {
        model:'groups',
        required:true
    },

    postid: 
    {
        model:'post',
        required:true
    },

    objectid: 
    {
        model:'objects',
        required:true
    },
  }
};

在客户端,我可以使用

订阅 Groupfeed 模型
io.socket.get('/groupfeed')

这是由蓝图 API 自动完成的 然后

io.socket.on('groupfeed',function(obj){console.log(obj)})

当我使用

在后端发布时,会给我有关模型更改的更新
Groupfeed.publishCreate({id:4,groupid:6,postid:2,objectid:1})

我想要什么:-

我希望客户端仅订阅来自特定组 ID 的组源。 例如:用户X可以从groupid 1订阅groupfeeds(注意:组模型存储组的用户成员资格)

或者类似这个想象中的调用:

io.socket.get('/groupfeed?groupid=5')

这样,当我使用 groupid:5 调用publishCreate时,只有订阅 groupid 5 的 groupfeed 的人才能获得更新

最佳答案

您最好为团体创建不同的房间。

代码未经测试! 创建一个 Controller : 通知 Controller .js

module.exports = {

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

您可以在某个地方创建通知:

var roomNameForGroup = 'group_' + groupId;
sails.sockets.blast(roomNameForGroup, {id:4,groupid:6,postid:2,objectid:1});

在您看来:

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

我现在无法测试代码,但它看起来可行。

关于javascript - Sails js 订阅 groupid 属性范围内的模型更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30253017/

相关文章:

php - 有没有比 echo 更好的方法来做到这一点?

javascript - 无法让 socket.emit 处理表单值

node.js - Socket.IO send() 不起作用

javascript - 在 sails.js 中保存用户

node.js - 身份验证/ session 无法在 Sails with Passport 中的一页上运行

node.js - 在 sailjs 上实现 https 服务器

javascript - 当用户在新窗口中打开时,如何使 onclick "window.location"也起作用

javascript - 根据所选时区更改日期显示格式

javascript - 用meteor保存串口列表

javascript - 带有 Angular 的 socket.io 不会立即显示消息