Node.js Redis pub/sub-监听一个频道的同一进程
我有一个Node.js服务器-我希望进程能够侦听从自身发送的消息-这只是用于测试。我遇到的问题是,当向同一进程发布消息时,订阅者似乎根本没有收到消息 我有以下设置:Node.js Redis pub/sub-监听一个频道的同一进程,node.js,express,redis,Node.js,Express,Redis,我有一个Node.js服务器-我希望进程能够侦听从自身发送的消息-这只是用于测试。我遇到的问题是,当向同一进程发布消息时,订阅者似乎根本没有收到消息 我有以下设置: var redis = require('redis'); var rcPub = redis.createClient(); var rcSub = redis.createClient(); var message = String('testing123'); rcSub.subscribe('redis_channel
var redis = require('redis');
var rcPub = redis.createClient();
var rcSub = redis.createClient();
var message = String('testing123');
rcSub.subscribe('redis_channel@test_overall_health');
rcSub.on('message', function (channel, msgs) {
console.log(channel,msgs);
});
rcPub.publish('redis_channel@test_overall_health', message);
我有一个redis客户端作为订阅者,一个作为发布者,这是你必须做的,但由于某种原因,消息没有被接收。进程不能侦听其发布的消息是否存在一些限制?这似乎没有道理。我可以验证此代码是否正确,因为侦听同一频道的其他进程收到了消息。显然,
SUBSCRIBE
命令是在PUBLISH
命令之后发送的
节点的Redis客户端将命令排队,直到与Redis服务器建立连接,并在套接字上接收到connect
事件时将排队的命令刷新到服务器。首先启动连接的客户端(发布服务器)很可能首先接收connect
事件,此时它将发送其排队命令(发布)。由于Redis在单个线程中处理命令,因此订阅者只有在发布命令完成后才能订阅。其他进程能够接收消息,因为它们已经订阅了此通道
在大多数情况下,应首先创建订阅服务器客户端,尽管更安全的方法是在发布任何消息之前等待订阅完成:
var redis = require('redis');
var publisher = redis.createClient(),
subscriber = redis.createClient(),
message = 'testing123';
subscriber.subscribe('redis_channel@test_overall_health');
subscriber.on('message', function (channel, message) {
console.log(channel, message);
});
subscriber.on('subscribe', function (channel, count) {
publisher.publish('redis_channel@test_overall_health', message);
});
很酷,谢谢,我周一上班时会试试这个:)试试看,你说的似乎是对的,谢谢你弄明白了。我为自己创建的这个问题存在于各种各样的发布/订阅库中,这清楚地表明我在这里是一个新手:)这是一个问题,尽管如此,因为异步库始终具有欺骗性。IMO,subscriber.subscribe应该强制您包含回调,这将消除欺骗。如果您需要一个单独的回调“sub.on('subscribe'),那么您可以自己实现一个EventSemiter,这样会更好。