2013-03-23 8 views
4

node.js 예제로 작업하고 있습니다. 내 우분투 12.10 컴퓨터에 openpgm 및 zeromq 3.2를 설치했습니다.zeromq epgm pub/sub not working

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 = 필요 ('zmq'), 포트 = '; epgm 239.192.1.1 // eth0를 : 5555'여기 코드는;

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

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

socket.connect (port);

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

console.log ('connected!');

socket.on ('message', function (data) { console.log (socket.identity + ':받은 데이터'+ data.toString());});

올바른 멀티 캐스트 주소를 사용하고 있는지 확실하지 않습니다. 나는이 기기들을 같은 기계에서 함께 시험해 보았고, 또한 네트워크의 다른 기계에서도 시험해 보았다. 나는 그 부분을 통해 생각하지 못했지만, 어디서나 좋은 설명을 찾을 수는 없다고 확신합니다. 그러나 나는 이것이 어쨌든 동일한 기계에서 작동 할 것으로 예상했다. 어떤 아이디어?

추신 : 정확히 무슨 일이 일어 났는지 설명하는 것을 잊어 버렸습니다. 기본적으로 푸시 프로그램은 오류없이 모든 메시지를 푸시하고 끌어 오기 프로그램을 시작하지만 메시지를받지 않습니다.

답변

2

확실하지 않음이 도움이되지만 나뿐만 아니라 노드에 zmq 실험 봤는데 몇 가지 관찰 한 경우 :

나는 네 개의 기계를 사용하여 실행하고 있습니다 : 1 : OS X 10.8.3 2 : VM에서 우분투 12.10 (브리지) 3 : 우분투 12.04 별도의 시스템
4 : 나는 기계 1 (위의 코드와 너무 비슷하지 않음) 모든 시스템에서 동일한 테스트 서버를 시작하면 우분투 12.04는 별도의 시스템

가 :보고 시스템 3 및 4의 업데이트 시스템 2 : updat를 봅니다. 1, 2, 3, 4 기계 3에서 ES는 :

4 그래서 자체 OS X 블록 방송처럼 보인다, 1, 3에서 업데이트를보고 : 1, 3, 4 기계 4에서 업데이트를 본다. VM의 Ubuntu 12.10은 모든 사람들을 보내고 있지만 (아마도 VM에서 실행되는 것과 관련된) 문제를 보내고 있으며 다른 머신이 자체적으로 문제를 겪고 있습니다.

내 서버/클라이언트 :

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! 
+0

기본적으로 OSX 머신이 브로드 캐스트를 차단하고 있습니다. 나는 가상 머신에서 우분투를 실행하지도 않는다. 그것은 기본 운영 체제이며 여전히 내 자신의 업데이트를 볼 수 없습니다. 그러나 나는 당신의 코드 (특히 당신이 선택한 브로드 캐스트 주소)를 시도해보고 그것에 대해 총을 줄 것이다 – Munim

+0

사실 추가 조사에 ... OS X은 올바르게 작동하고있다 ... 우분투보다 더 새로운 버전의 libzmq를 사용하고 있으며 루프백을 막았다. 문제가 있었기 때문에 멀티 캐스트에서. 그래서 OS X 머신은 다른 모든 사람들의 방송을 얻고 있습니다. 방송 잘하고있어. 문제가있는 것 같습니다 12.10입니다. 12.04 머신은 v3 대신 v2의 zmq를 사용하고 있기 때문에 제대로 작동합니다. – Cyclone

2

epgm 및 pgm은 PUB/SUB에서만 작동합니다.

+0

당신이 내 코드를 보면나요? 나는 술집/잠수함을하고있다. – Munim

+0

@Munim 그러면 제목을 고칠 수있을 것입니다. – Wildfire

+0

@ Wildfire 오. 나는 내 제목이 푸시/풀이라고 말한 것을 깨닫지 못했습니다. 죄송합니다! – Munim