我正在尝试实现我对于我在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错误?
答案 0 :(得分:0)
我必须做一些额外的管道才能得到我想要的结果。
必须向subscriber-publisher.js添加发布者套接字,并从其发布到其他端口。然后我不得不将subscriber.js订阅到publisher.js和subscriber-publisher.js发布的两个端口。
所以现在我明白为了用pub-sub做这个,我必须构建更多的套接字,并且必须做一些我认为的手动订阅。