Sails js订阅由groupid属性作用域的模型更改

时间:2015-05-15 06:35:29

标签: 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})

我想要的: -

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

或类似虚构的召唤:

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

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

1 个答案:

答案 0 :(得分:3)

您最好为小组创建不同的房间。

CODE UNTESTED! 创建一个控制器: NotificationsController.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);
        }
    });
});

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