Sails.js套接字有时只能工作

时间:2014-12-04 13:30:29

标签: javascript websocket sails.js

我是Sails.js的新手(使用0.10.5)并且我在使用sockets.io时遇到了一些障碍。

我只有一个用户CRUD系统,其管理页面可以监控用户创建,销毁,登录或注销的实时时间。

我用于chrome的实例:一个用于管理员,另一个用于隐身模式,用于另一个用户。

当我尝试创建一个用户然后,在同一页面中,我将他登出然后登录或试图摧毁他,一切正常。换句话说,如果我创建一个用户,则创建消息动词',更新'并且'销毁'效果非常好!甚至可以实时修改DOM。

我有一个型号:用户 还有两个控制器:SessionController和UserController。

当我登录时,'创建'调用SessionController中的方法。当我退出时,'销毁'调用SessionController的方法。两者都将publishUpdates发送到客户端。

当我创建用户时,UserController会发送publishCreate(以及销毁时的publishDestroy)。

但是,如果我关闭浏览器的两个页面(甚至打开服务器)并重新打开它们,则更新'消息不再传输。只有'创建'并且'销毁'动词仍然有效。 (用户一直都在订阅)。

有什么想法吗?

CODE

用户控制器

subscribe: function(req, res) {
    if (req.isSocket) {
        User.watch(req.socket);
        res.send(200);
    }
}

destroy: function(req, res, next) {
    User.findOne(req.param('id'), function foundUser(err, user) {

        User.destroy(req.param('id'), function userDestroyed(err) {

            User.publishUpdate(user.id, {
                name: user.name,
                action: ' has been destroyed.'
            });

            User.publishDestroy(user.id);
        });
        res.redirect('/user');
    });
},

create: function(req, res, next) {
    var userObj = {
        name: req.param('name'),
    };

    User.create( userObj, function userCreated (err, user) {

        req.session.authenticated = true;
        req.session.User = user;

        user.online = true;

        user.save(function(err, user) {

            user.action = " signed-up and logged-in.";
            User.publishCreate(user);

            res.redirect('/user/show/' + user.id);
        });
    });
}

会话控制器

create: function(req, res, next) {


    User.findOneByEmail(req.param('email'), function foundUser(err, user) {

        req.session.authenticated = true;
        req.session.User = user;

        user.online = true;

        user.save(function(err, user) {

            User.publishUpdate(user.id, {
                loggedIn: true,
                id: user.id,
                name: user.name,
                action: ' has logged in.'
            });

            res.redirect('/user/show/' + user.id);
        });
    });
},

destroy: function(req, res, next) {

    User.findOne(req.session.User.id, function foundUser(err, user) {
        var userId = req.session.User.id;

        User.update(userId, { online: false }, function(err) {

            User.publishUpdate(userId, {
                loggedIn: false,
                id: userId,
                name: user.name,
                action: ' has logged out.'
            });

            req.session.destroy();
            res.redirect('/session/new');
        });
    });
}

APP.JS

io.socket.on('connect', function socketConnected() {

    io.socket.on('user', function (message) {

        switch (message.verb) {
                case 'created':
                    console.log('User ' + message.data.name + message.data.action);
                    break;

                case 'updated':
                    console.log('User ' + message.data.name + message.data.action);
                    break;

                case 'destroyed':
                    console.log('User ' + message.id + ' has been destroyed');
                    break;

            default:
                break;
        }
    });

    socket.get('/user/subscribe');
});

政策

  if (req.session.User) {
    return ok();
  } else {
    res.send(403);
  }

0 个答案:

没有答案