如何轮询redis++订阅者

问题描述 投票:0回答:1

我正在将 redis++ 用于具有 redis 后端的应用程序。我们依靠 pubsub 来实现不同进程之间的一些通信。

目前,我们使用socket_timeout和循环来消费消息。然而,这有一些缺点。

  1. 如果有其他工作进来(不是通过redis),它只能在socket_timeout到期后处理
  2. 我无法在不阻塞的情况下检查订阅者是否有消息

查看源代码后,通过 Connection 类公开hiredis 文件描述符似乎并不难。 在理想的情况下,我想对该 fd 和其他一些文件运行 select/poll 调用,但如果我可以查询订阅者是否工作准备就绪,我可能已经很高兴了。

在开始工作之前,我想知道这是否是一个已知问题,或者我是否以错误的方式看待这个问题。

redis
1个回答
0
投票

如果有其他工作进来

您的意思是您需要拨打

subscribe
psubscribe
电话吗?

如果您使用同步版本的

Redis::Subscriber
,是的,您必须等到套接字超时,或者您可以让另一个进程/线程向通道发布消息以唤醒阻塞的客户。

另一个解决方案是使用AsyncSubscriber。使用此类,您可以订阅或 psubscribe 频道,而无需等到套接字超时。

© www.soinside.com 2019 - 2024. All rights reserved.