Node.js ZeroMQ:订阅服务器可以发布吗?

Node.js ZeroMQ:订阅服务器可以发布吗?,node.js,zeromq,Node.js,Zeromq,我正在尝试实现一个想法,我正在Node.js中使用0mq开发一个pub/sub应用程序。我想将消息发布作为一种事件系统 举个例子:假设我有一个出版商和两个订户 每当文件发生更改时,发布者都会发送一条消息: //publisher.js 'use strict'; const fs = require('fs'), zmq = require('zmq'), // create publisher endpoint publisher = zmq.socket('pub'), f

我正在尝试实现一个想法,我正在Node.js中使用0mq开发一个pub/sub应用程序。我想将消息发布作为一种事件系统

举个例子:假设我有一个出版商和两个订户

每当文件发生更改时,发布者都会发送一条消息:

//publisher.js
'use strict';

const fs = require('fs'),
      zmq = require('zmq'),

// create publisher endpoint
publisher = zmq.socket('pub'),

filename = 'target.txt';

fs.watch(filename, function(){
  // send message to any subscribers
  publisher.send('files changed');
});

// listen on TCP port 5432
publisher.bind('tcp://*:5432', function(err) {
  console.log('Listening for zmq subscribers...');
});
订户#1记录控制台发生的一切:

//subscriber1.js
'use strict';

const zmq = require('zmq'),
      subscriber = zmq.socket('sub');

// subscribe to all messages
subscriber.subscribe('');

// handle messages from publisher
subscriber.on("message", function(data) {
    console.log('Got a message: ' + data);
});

// connect to publisher
subscriber.connect("tcp://localhost:5432");
订阅服务器#2验证对文件的更改,并发送一条消息让我们知道它看起来正常:

//subscriber2.js
'use strict';

const zmq = require('zmq'),
      subscriber = zmq.socket('sub');

// subscribe to all messages
subscriber.subscribe('');

// handle messages from publisher
subscriber.on("message", function(data) {
    //pretend I did some work here

    subscriber.send('File looks great!');
});

// connect to publisher
subscriber.connect("tcp://localhost:5432");
我所期望的是,通过套接字从订阅服务器2发回消息会将其转发到订阅服务器1,由订阅服务器1登录。但这似乎没有发生


我可能从根本上误解了酒吧/酒吧,但有可能做到我所说的吗?如果是这样,我是否需要使用不同的模式,或者我只是使用了zmq API错误?

我必须做一些额外的管道来获得我想要的结果

必须将发布服务器套接字添加到subscriber-publisher.js,并从中发布到其他端口。然后,我必须将subscriber.js订阅到publisher.js和subscriber-publisher.js发布的两个端口


所以现在我明白了,为了使用pub-sub实现这一点,我必须构建更多的套接字,并且必须像我所想的那样进行更多的手动订阅。

我必须做一些额外的管道来获得我想要的结果

必须将发布服务器套接字添加到subscriber-publisher.js,并从中发布到其他端口。然后,我必须将subscriber.js订阅到publisher.js和subscriber-publisher.js发布的两个端口


所以现在我明白了,为了使用pub-sub实现这一点,我必须构建更多的套接字,并且必须像我所想的那样进行更多的手动订阅。

订阅者——顾名思义——不能发布任何内容。如果要发送消息,则需要不同类型的套接字(您自己的发布者套接字,或设置REQ/REP对,或其他…)。ZMQ应用程序通常使用多个不同类型的套接字。那么,我的subscriber2.js能否创建一个新的发布套接字,发送消息,然后销毁发布套接字?这是正确的方法吗?事实上,只是尝试了一下,没有效果。现在我想知道,subscriber2.js中是否需要其他类型的套接字?可能是路由器还是经销商?多个套接字订阅多个其他套接字是否常见?所以我的代码必须管理这些套接字之间的订阅?或者我需要这样做:订阅者——顾名思义——不能发布任何内容。如果要发送消息,则需要不同类型的套接字(您自己的发布者套接字,或设置REQ/REP对,或其他…)。ZMQ应用程序通常使用多个不同类型的套接字。那么,我的subscriber2.js能否创建一个新的发布套接字,发送消息,然后销毁发布套接字?这是正确的方法吗?事实上,只是尝试了一下,没有效果。现在我想知道,subscriber2.js中是否需要其他类型的套接字?可能是路由器还是经销商?多个套接字订阅多个其他套接字是否常见?因此,我的代码必须管理这些套接字之间的订阅?或者我需要: