zeromq epgm pub/sub не работает

Я работаю с примером node.js. Я установил openpgm и zeromq 3.2 на мою машину с Ubuntu 12.10. Вот код:

var zmq = require('zmq')
  , port = 'epgm://eth0;239.192.1.1:5555';

  var socket = zmq.socket('pub');

  socket.identity = 'publisher' + process.pid;

  var stocks = ['AAPL', 'GOOG', 'YHOO', 'MSFT', 'INTC'];

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

    setInterval(function() {
      var symbol = stocks[Math.floor(Math.random()*stocks.length)]
        , value = Math.random()*1000;

      console.log(socket.identity + ': sent ' + symbol + ' ' + value);
      socket.send(symbol + ' ' + value);
    }, 1000);
  });

и другое приложение:

var zmq = require ('zmq'), port = 'epgm: // eth0; 239.192.1.1: 5555';

var socket = zmq.socket ('sub');

socket.identity = 'subscriber' + process.pid;

Socket.connect (порт);

socket.subscribe ('AAPL'); socket.subscribe ('GOOG');

console.log ('подключен!');

socket.on ('message', function (data) {console.log (socket.identity + ': полученные данные' + data.toString()); });

Я не уверен, что использую правильную многоадресную адресацию. Я попробовал эти приложения вместе на одной машине, а также на другой машине в сети. Я почти уверен, что не продумал эту часть, но, похоже, нигде не могу найти хорошего объяснения этому. Но я ожидал, что это все равно будет работать на той же машине. Есть идеи?

PS: забыл объяснить, что именно происходит: в основном, push-программа просто отправляет все сообщения без ошибок, а pull-программа запускается, но не получает никаких сообщений.

2 ответа

Решение

Не уверен, поможет ли это, но я тоже экспериментировал с zmq в узле и сделал несколько наблюдений:

Я использую четыре машины: 1: OS X 10.8.3 2: Ubuntu 12.10 в виртуальной машине (мостовой режим) 3: Ubuntu 12.04 на отдельной машине
4: Ubuntu 12.04 отдельная машина

Когда я запускаю один и тот же тестовый сервер на всех машинах (не слишком отличающийся от приведенного выше кода) Машина 1: видит обновления с компьютеров 3 и 4 Машина 2: видит обновления с 1, 2, 3 и 4 Машина 3: видит обновления с 1 3, 4 Машина 4: видит обновления от 1, 3, 4

так что кажется, что OS X блокирует трансляции для себя. Ubuntu 12.10 в ВМ получает все, но у него возникают проблемы с отправкой (возможно, связанные с работой в ВМ?), А другие машины получают свои собственные.

Мой сервер / клиент:

os = require 'os'
zmq = require 'zmq'

client = zmq.socket "sub"
server = zmq.socket "pub"

client.connect "epgm://224.0.0.1:5555", (error) ->
    if error?
        console.log "client error:", error

client.subscribe ""
client.on "message", (buffer) ->
    console.log "received ping:", buffer.toString!

server.bind "epgm://224.0.0.1:5555", (error) ->
    if error?
        console.log "server error:", error
    setInterval ( -> 
        server.send "#{os.hostname!}" 
    ), 1000

process.on "SIGINIT", ->
    client.close!
    server.close!
    process.exit!

epgm и pgm работают только для PUB/SUB.

Другие вопросы по тегам