iOS中多个输入流的多线程



我的iOS应用需要连接多台服务器,最多5台。当我按顺序连接时,它很慢,因为服务器对初始数据查询的响应大约需要三秒钟。但是如果我打开同步连接,响应就会混合在一起,因为它们每个都有两个部分,CRLF在第二部分的末尾。通过两个连接,我最终得到两个输入:partApartApartB和partB。

侦听器在创建时被添加到运行循环中。它们可以放在单独的线程中吗?如果是这样,侦听器是否会彼此隔离,这样来自多个输入流的数据就不会混合在一起了?

我使用的代码是通用的。我的流监听器是:

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
    switch (streamEvent) {
        case NSStreamEventOpenCompleted:
            break;
        case NSStreamEventHasBytesAvailable:
            if (theStream == self.inputStream) {
                uint8_t buffer[1024];
                int len;
                while ([self.inputStream hasBytesAvailable]) {
                    len = [self.inputStream read:buffer maxLength:sizeof(buffer)];
                    if (len > 0) {
                        NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
                        self->recieved = [self->recieved stringByAppendingString:output];
                        if (nil != output && [self->recieved hasSuffix:@"->"]) {
                            [self messageReceived:recieved];
                            recieved = @"";
                        }
                    }
                }
            }
            break;
        case NSStreamEventErrorOccurred:
            break;
        case NSStreamEventEndEncountered:
            [self close];
            break;
        case NSStreamEventHasSpaceAvailable:
            break;
        default:
            break;
    } // end switch
}

我找到了一个简单的解决方案。通过将每个流放入新类的单独实例中,两个输入流彼此隔离。我之前使用了几个变量将所有流保存在一个类中,这种方法在其他环境中对我有效,但在iOS中不起作用。

最新更新