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!