ZeroMQ push/pull и nodejs чете поток

Опитвам се да прочета някакъв файл, като отворя потока за четене и изпращам части от файла през ZMQ към друг процес, за да ги консумира. Потокът работи както трябва, но когато стартирам работния файл, той не вижда изпратените данни.

Опитах да изпращам данни през сокет на всеки 500 милисекунди, а не при обратно извикване, и когато стартирам работния файл, той събира всички предишни части от данни:

sender = zmq.socket('push')
setInterval(() ->
  console.log('sending work');
  sender.send('some work')
, 500)

receiver = zmq.socket("pull")
receiver.on "message", (msg) ->
  console.log('work is here: %s', msg.toString())

Изходи:

sending work
sending work
sending work
sending work
sending work
// here I start the worker
sending work
work is here: some work
work is here: some work
work is here: some work
work is here: some work
work is here: some work
work is here: some work
sending work
work is here: some work
sending work
work is here: some work
sending work
work is here: some work

Така че, когато работникът стартира, той започва с изтегляне на всички предишни данни и след това ги изтегля всеки път, когато влезе sth new. Това не се прилага, когато правя това:

readStream = fs.createReadStream("./data/pg2701.txt", {'bufferSize': 100 * 1024})
readStream.on "data", (data) ->
  console.log('sending work');
  sender.send('some work'); // I'd send 'data' if it worked..

В този сценарий работникът изобщо не изтегля никакви данни. Тези видове сокети трябва ли да създават опашка или не? Какво ми липсва тук?


person tupaja    schedule 07.11.2012    source източник
comment
Някакви съобщения за грешка или просто не работи?   -  person floatingLomas    schedule 08.11.2012
comment
просто не работи, работникът стартира правилно, всичко изглежда така, сякаш това е нормалното поведение.. нали?   -  person tupaja    schedule 08.11.2012


Отговори (1)


Да, push socket блокира до достигане на HWM и няма до кого да изпратите. Може подателят все още да не се е свързал, опитайте нещо подобно:

sender.bind('address', function(err) {
  if (err) throw err;
  console.log('sender bound!');

  // the readStream code.
}

също така connect липсва в примера ви с код, обзалагам се, че е там, но може би сте го забравили.

person balazs    schedule 08.11.2012