1

当我使用 ObjCHiredis redis 连接到无效的 IP 和端口时,它会被阻塞。如何将其设置为非阻塞模式?谢谢

- (void)setUp {
NSLog(@"begin setUp");
NSString *ip = @"125.124.125.125";
self.redis = [ObjCHiredis redis:ip on:[NSNumber numberWithInt:123] db:[NSNumber numberWithInt:0]];
if(self.redis == nil)
{
    NSLog(@"init redis error.");
    return ;
}
 NSLog(@"end setUp");
}
4

1 回答 1

0

最简单的方法可能是在单独的线程上运行连接并使用块来处理主线程上的响应。

这是我经常用来执行任何类型的异步任务的辅助方法。我已经对其进行了调整,因此它应该适用于您正在尝试做的事情:

+(void)threadedConnect:(NSString*)ip On:(int)port DB:(int)db WithResponseTask:(void(^)(ObjCHiredis *redis))task
{
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

    dispatch_async(queue, ^{

        ObjCHiredis *redis = [ObjCHiredis redis:ip
                                on:[NSNumber numberWithInt:port]
                                db:[NSNumber numberWithInt:db]];

        // Run completion block back on main thread with result as argument
        dispatch_async(dispatch_get_main_queue(), ^{ task(redis); });
    });
}
于 2013-01-19T00:42:32.977 回答