在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时读取密钥。

我的问题的第一部分是关于使我的期望与RPUSH / BLPOP在Node上的实际期望行为保持一致。

问题的第二部分:我真的不必使用Redis。 我只是在寻找“发生事件”(从最抽象的意义上)时响应客户端的任何方法。 我愿意提出替代建议。

===============>>#1 票数:1 已采纳

Redis协议通常是同步的,因此Redis节点客户端将请求排队并按顺序执行。 尝试使用其他Redis连接,您将获得预期的结果。

  ask by Ates Goral translate from so

未解决问题?本站智能推荐:

5回复

Node&Redis:Redis客户端

假设您在Redis中有多个数据库,您想插入和/或删除数据。 你有一个流动; 将数据插入DB#1 在第一次插入后, 回调执行一些操作并将数据插入到DB#2中 在第二次插入后, 回调再次执行一些操作,最后将数据插入到DB#3中 我使用一个名为redisClient
1回复

Node.js:有多少Redis客户端?

在Node.js中,最好为每个单独的HTTP请求或用户执行createClient(),还是最好为所有请求重用相同的客户端? 你还只用一个来获得几个并行客户端的速度吗?
1回复

如何杀死Node在Redis上打开的空闲客户端?

我很难自动关闭Redis的客户端连接。 redis包无疑是一个问题: ( https://www.npmjs.com/package/redis ) Redis将使连接保持活动状态,直到您关闭它们或达到默认为无限的超时为止。 我知道这一点: 如何杀死空闲的Redis客户
1回复

使用Node Redis客户端处理错误

我正在使用Node Redis客户端库,并希望设计我的错误处理逻辑。 有人可以帮助回答以下问题吗? 简而言之,我需要知道写操作(包括事务和脚本)是否成功。 具体来说,我正在考虑客户端断开连接的情况。 我看到三种情况: 1)客户端在操作开始之前断开连接2)操作开始但失败,但是
1回复

节点redis客户端HSET命令失败

我正在处理的当前项目中有一个DAO(数据访问对象),它是redis db的抽象。 这是与下面我即将遇到的问题相关的所有代码: 每当我使用此对象时,例如: 没有意义的是createPage() updatePage()调用updatePage() ! 为什么当我直接调用upda
2回复

节点JS Redis客户端连接重试

目前我使用https://github.com/mranney/node_redis作为我的节点redis客户端。 client.retry_delay默认设置为client.retry_delay 。 我尝试连接到redis,一旦连接成功,我手动停止redis服务器以查看clien
1回复

解耦的node.js应用中的Redis客户端

嗨,我在node.js应用程序中使用Redis进行用户缓存。 用户登录后,将缓存用户信息,并在每隔一个其他请求时访问该用户信息,以确定该用户具有什么访问权限,然后客户端根据该信息接收信息,视图等。 现在,该应用程序在开头创建了redisClient,并将其传递给所需的快速路由回调(几乎所有回
3回复

Node.js:关闭时关闭所有Redis客户端

今天,我将Redis集成到我的node.js应用程序中,并将其用作会话存储。 基本上,在身份验证成功后,我会将相应的用户对象存储在Redis中。 身份验证后收到HTTP请求时,我尝试使用哈希从Redis检索用户对象。 如果检索成功,则意味着用户已登录并且可以满足请求。 将用户对象
1回复

与Redis客户端一起使用的相同Redis密码通过Node.JS createClient()方法失败吗?

我有一台运行Node.JS 10.4.2版的Redis服务器。 我在我的应用程序中使用NPM“ redis”客户端。 我正在使用以下代码创建Redis客户端并进行身份验证。 (请注意,下面注释掉的代码可以查看我还尝试了什么): 但是,我总是收到以下错误: 使用注释掉的代码时
1回复

节点重做,变量在客户端之间共享?

节点的redis的异步特性正在杀死我。 我看到当消息处理从一个客户端切换到另一客户端时,我认为是独立的变量看起来会被其他客户端覆盖。 我不知道为什么两个客户端之间共享变量。 来自client1的数据与来自client2的数据不同,但是当我记录它时,来自client2的数据被记