ZeroMQ:订阅者可以发布吗?

ZeroMQ: Can subscribers publish?

我正在尝试实现我在 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 将记录它。但这似乎并没有发生。

我可能从根本上误解了 pub/sub,但是我说的有可能吗?如果是这样,我需要使用不同的模式,还是我只是使用了 zmq API 错误?

我必须做一些额外的管道工作才能获得我想要的结果。

必须将发布者套接字添加到订阅者-publisher.js,并从中发布到不同的端口。然后我不得不订阅 subscriber.js 到 publisher.js 和 subscriber-publisher.js 发布的两个端口。

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