如何更新网站&&来自节点js中另一个进程的移动设备?

时间:2015-02-07 20:14:12

标签: node.js socket.io

我有一些过程:

var fetcher = new Fetcher({ url: 'http://www.example.com' });
setInterval(function() {
    fetcher.getImageUrls().then(saveToDb, handleError, notifyProgress);
}, 10000);

我也有一个网站,我想使用socket.io推送更新 关于进度(使用notifyProgress方法)。我不知道 如何将网站与流程同步。

请注意,我无法使用事件,因为该过程可以在任何地方生活(我也可以使用更多实例复制该过程)

我该怎么做?

由于

1 个答案:

答案 0 :(得分:0)

您想使用Redis创建PUB / SUB系统。

您将向频道发布您的更新;

// notifyProgress.js
var Redis = require('redis'),
    redis = Redis.createClient(6379, 127.0.0.1);

module.exports.publish = function (req, res, next) {
    //publish to the mySpecialChannel channel.
    redis.publish('mySpecialChannel', data);
};

您的不同服务器/群集将订阅该频道。

//socket server
var Redis = require('redis'),
    redis = Redis.createClient(6379, 127.0.0.1),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io')(server);

redis.on('subscribe', function (channel, count) {
    console.log('server subscribed to %s', channel);
});

redis.on('message', function (channel, message) {
    if (channel === 'mySpecialChannel') {
        //send info to your clients.
        io.emit('update', message)
    }
});

redis.subscribe('mySpecialChannel');