在Hiredis异步上下文

时间:2017-08-10 14:38:46

标签: asynchronous tcp redis hiredis

我正在编写hiredis的包装器,以便在redis节点关闭时启用重新连接的发布/订阅功能。

我正在使用异步redis API。

所以我有一个测试工具来设置发布者和订阅者。然后,线束关闭用户正在读取的从VM。

但是,断开连接回调直到很久之后才被调用(当我解构包含相应redisAsyncContext的Subscription对象时。

我认为解决方法可能是使用tcp keepalive。

所以我发现net.h中有一个合适的redis函数:

int redisKeepAlive(redisContext * c,int interval);

但是,以下内容似乎表明redisKeepAlive函数已故意从库中删除:

$ nm libhiredis.a --demangle | grep redisKeepAlive
0000000000000030 T redisKeepAlive
                 U redisKeepAlive

$ nm libhiredis.a -u --demangle | grep redisKeepAlive
             U redisKeepAlive

当我尝试使用该调用时,链接器会抱怨:

Subscription.cpp:167: undefined reference to `redisKeepAlive(redisContext*, int)'
collect2: error: ld returned 1 exit status

我运气不好 - 有没有办法在Hiredis异步上下文中设置TCP keepalive间隔?

更新 我发现了这个:

int redisEnableKeepAlive(redisContext *c);

但是在asyncContext-> c上设置它并调整REDIS_KEEPALIVE_INTERVAL似乎没有效果。

1 个答案:

答案 0 :(得分:0)

我发现redisKeepAlive的实现包含显示如何直接访问底层套接字描述符的代码:

these r restaurant open timings ,timings can be like open now till next morning or closed for sometime same day and open next half same day till next day or midnight      
 examples

        Case1: 10:00  01:00
        Case2: 10:00  23:59
        Case3: 10:00  00:00
        Case4: 23:59  05:00
        Case5: 08:35  15:30 && 17:30 02:00
       Case6: 10:00  15:00 && 17:00 00:00

}

也许这会帮助别人......