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 做到这一点,我必须构建更多的套接字,并且必须像我想的那样做更多的手动订阅。
我正在尝试实现我在 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 做到这一点,我必须构建更多的套接字,并且必须像我想的那样做更多的手动订阅。