当我使用 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");
}
最佳答案
执行此操作的最简单方法可能是在单独的线程上运行连接并使用 block 来处理返回到主线程的响应。
这是我经常用来执行任何类型的异步任务的辅助方法。 我已经对其进行了调整,因此它应该适用于您正在尝试做的事情:
+(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); });
});
}
关于ios - 如何解决ObjCHiredis redis的setUp block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409753/