我正在使用redis pub / sub进行一些实时处理。
在订阅结束时,我想订阅指定的频道,然后进行其他一些计算。如果我向服务器发送subscribe
命令,它会阻止代码。
那么我该如何做其他事情,当订阅消息到达时,我通过回调处理程序处理它?</ p>
答案 0 :(得分:1)
您需要两个不同的连接才能做到这一点。这是一个设计选择,因为当您SUBSCRIBE / PSUBSCRIBE时,实际上连接语义从Request-Response变为Push-style,因此不适合运行命令而不实现更复杂的语义,例如, IMAP协议。
答案 1 :(得分:0)
第一点是将Redis连接专用于订阅。一旦在连接上应用了SUBSCRIBE或PUSBSCRIBE,就只能完成与订阅相关的命令。因此,在C程序中,您需要至少一个用于订阅的连接,以及一个与Redis做任何其他事情的连接。
然后你还需要找到一种方法来处理来自C程序的这两个连接。有几种解决方案可行。例如:
使用多线程,并将一个线程专用于负责订阅的连接。在接收新事件时,专用线程应将消息发布到主应用程序线程,这将激活回调。
使用非阻塞和异步API。 Hiredis附带事件循环适配器。您需要一个事件循环来处理与Redis的连接(包括专用于订阅的连接)。在接收到发布事件时,相关的回调将由事件循环直接触发。这是an example of subscription with hiredis and libevent。