在 Node 上,我试图在一些数据可用时立即向客户端发送响应,如果数据在分配的期限内不可用,则超时并返回 404。数据通过另一个客户端请求传入,该请求可能发生在等待数据的请求之前或之后。
我目前的尝试是使用 Redis 并在数据进来时执行 RPUSH 并执行 BLPOP 以等待数据。它的行为不像我预期的那样。
使用 redis ~0.10.1,我的代码看起来像这样:
等待端:
redisClient.blpop(key, 10, function (err, value) {
if (!err && value) {
res.send(value);
} else {
res.send(404);
}
});
设置端:
redisClient.rpush(key, 'something');
redisClient.expire(key, 30);
res.end();
我的期望是在进行 RPUSH 调用后立即调用 BLPOP 回调。但是,BLPOP 超时,我只能在后续请求 + 调用 BLPOP 时读取 key 。
我的问题的第一部分是关于使我的期望与 Node 上 RPUSH/BLPOP 的实际预期行为保持一致。
我的问题的第二部分:我真的不必使用 Redis。我只是在寻找任何方式在“事件发生”(在最抽象的意义上)时响应客户端。我愿意接受有关替代方案的建议。
最佳答案
redis协议(protocol)一般是同步的,所以redis Node 客户端将请求排队,串行执行。尝试使用不同的 redis 连接,您应该会得到预期的结果。
关于node.js - Redis key 可用时立即响应 Node 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23184456/