Node.js ZeroMQ:订阅服务器可以发布吗?
我正在尝试实现一个想法,我正在Node.js中使用0mq开发一个pub/sub应用程序。我想将消息发布作为一种事件系统 举个例子:假设我有一个出版商和两个订户 每当文件发生更改时,发布者都会发送一条消息: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
//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中是否需要其他类型的套接字?可能是路由器还是经销商?多个套接字订阅多个其他套接字是否常见?因此,我的代码必须管理这些套接字之间的订阅?或者我需要: