Отъезд zeromq, он должен предоставить несколько простых высокопроизводительных абстракций IPC, чтобы делать то, что вы хотите. В частности, полезно использовать the pub/sub example.
Основная задача, которую я представляю себе, не зная ничего о том, как Heroku порождает несколько экземпляров сервера, будет логикой определения, кто является издателем (остальные экземпляры будут подписчиками). Итак, допустим, ради аргумента, что ваш хостинг-провайдер дает вам переменную среды, называемую INSTANCE_NUM
, которая является целым числом в [0,1024]
, указывая номер экземпляра процесса; поэтому мы скажем, что экземпляр zero является издателем сообщений.
var zmq = require('zeromq')
if (process.env['INSTANCE_NUM'] === '0') { // I'm the publisher.
var emitter = getEventEmitter(); // e.g. an HttpServer.
var pub = zmq.createSocket('pub');
pub.bindSync('tcp://*:5555');
emitter.on('someEvent', function(data) {
pub.send(data);
});
} else { // I'm a subscriber.
var sub = zmq.createSocket('sub');
sub.subscribe('');
sub.on('message', function(data) {
// Handle the event data...
});
sub.connect('tcp://localhost:5555');
}
Обратите внимание, что я новичок в zeromq, и приведенный выше код полностью не проверен, просто для демонстрации.
Интересный вопрос. Интересно, если вы считаете базу данных, содержащую статистику и еще что-то, а затем каждый процесс пинает это время от времени? – Marshall
Да, но это может привести к поразительной остроте узла. По существу, это не что иное, как опрос. –
[Это сообщение] (http://stackoverflow.com/questions/8490093/node-js-share-sockets-between-processes) может иметь значение. – Marshall