如何将单个用户(会话)的节点应用程序中的消息推送到客户端?

时间:2016-05-16 22:04:19

标签: node.js socket.io sails.js

我试图将消息从服​​务器推送到客户端,而不是反复从客户端提取消息,以便每个客户端只接收该用户的消息。我正在使用Sails JS框架。

我有一个FooController可以触发客户端正在侦听的事件。在该控制器中,我有以下操作:

var count = 0;
module.exports = {
    hello: function (req, res) {
        if (!req.isSocket) {
            return res.badRequest();
        }

        sails.sockets.join(req, 'someRoom', function(err) {
            console.log('joined');
        });

        setInterval(function() {
            console.log(req.cookies);
            sails.sockets.broadcast('someRoom', 'someEvent', { greeting: 'Hello. Counter is ' + (++count) });
        }, 500);

        res.json({status: 'Everything is okay'});
    }
};

客户端,我正在听取事件并向其发出一个请求。由于setInterval

,这会无限期地在服务器端触发事件
io.socket.on('someEvent', function (data){
  console.log('hello joined now');
  console.log(data);
});

console.log('making get request');
io.socket.get('/foo/hello', function (body, res) {
    console.log('server responded');
});

问题是当我从另一个浏览器发出另一个请求时,似乎同步变量。例如,如果我向Chrome发出请求并让计数器计数到100,那么转到Firefox并导航到同一页面,计数器将在Firefox中返回101,102,103等。

我想知道为什么计数器在Firefox的新会话中不会重新开始为0?

0 个答案:

没有答案