2013-03-23 29 views
4

我正在使用node.js示例。我在我的ubuntu 12.10机器上安装了openpgm和zeromq 3.2。下面的代码:zeromq epgm pub/sub不工作

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); 
    }); 

和其他应用程式:

变种ZMQ =要求( 'ZMQ'),端口= 'epgm:// eth0的; 239.192.1.1:5555';

变种插座= zmq.socket( '子');

socket.identity = '订户' + process.pid;

socket.connect(port);

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

console.log('connected!'); ('message',function(data){ console.log(socket.identity +':received data'+ data.toString());});

我不知道如果我使用了正确的组播地址。我已经在同一台机器上同时在网络中的另一台机器上尝试了这些应用程序。我很确定我没有想过那部分,但我似乎无法在任何地方找到任何好的解释。但我希望这个工作在同一台机器上。有任何想法吗?

PS:忘了解释到底发生了什么:基本上按计划只是推动所有的消息没有任何错误,而拉程序启动,但没有收到任何消息。

回答

2

不知道这是否会有所帮助,但我一直在节点与ZMQ试验以及并取得了一些意见:

我用4台机器上运行: 1:OS X 10.8.3 2: Ubuntu的12.10 VM(桥接) 3:Ubuntu的12.04台单独的机器
4:Ubuntu的12.04台单独的机器

当我开始了同样的测试服务器上的所有机器 机器1(从上面的代码中没有太多不同):看到机器3和4的更新 机器2:查看更新从1,2,3,4 机3 ES:看到更新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! 
+0

所以基本上,OSX机器阻止广播。我甚至没有在虚拟机上运行ubuntu。这是一个基本的操作系统,我仍然看不到我自己的更新。但我会尝试你的代码(特别是你选择的广播地址),并给它一个镜头 – Munim

+0

其实在进一步调查...... OS X工作正常......它使用比Ubuntu的更新版本的libzmq,并且他们阻止了环回多播,因为它有问题。所以OS X机器正在获得其他人的广播,但它自己的。它播放得很好。似乎有问题的那个是12.10。考虑到他们使用zmq的v2而不是v3,12.04机器也正常工作。 – Cyclone

2

epgm只为PUB/SUB PGM工作。

+0

难道你看我的代码?我在做一个pub/sub。 – Munim

+0

@Munim然后你可能会修复标题。 – Wildfire

+0

@Wildfire哦。我没有意识到我的头衔说推/拉。抱歉! – Munim