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 に答える