因为项目需求,我需要建立一个Connection连接,上层类通过该连接不断向服务器发送buffer。因为连接数限制,不能使用socket,要求采用http。目前我使用NSMutableURLRequest 中setHTTPBodyStream 的方法。
我现在的代码思路是在
1.初始化一个NSInputStream,然后设置代理并且加入runloop
2.在Request把InputStream 加进去。
3.建立连接。
4.等待NSInputStream的回调方法,然后加入数据。
代码
NSMutableData *mutableData = [NSMutableData dataWithLength:uploadData.length];
self.inputStream = [NSInputStream inputStreamWithData:mutableData];
self.inputStream.delegate =self;
[self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.inputStream open];
[request setHTTPBodyStream:self.inputStream];
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
// delegate
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
switch (eventCode) {
case NSStreamEventOpenCompleted: {
NSLog(@"producer stream opened");
} break;
case NSStreamEventHasBytesAvailable: {
// 这里写入buffer
NSLog(@"NSStreamEventHasBytesAvailable");
}
}
现在的问题:
1.初始化流时,发送Stream的大小是否为初始化传入Data的大小?
NSMutableData *mutableData = [NSMutableData dataWithLength:uploadData.length];
self.inputStream = [NSInputStream inputStreamWithData:mutableData];
2.我打印日志发现connection是在流写入完成之后然后才建立连接发送数据的。能否做到先建立Connection然后自己主动调用Stream同步方法往里面写数据,这时候已经开始传入数据了(现在使用的是stream的回调方法)?
这里先谢谢各位大牛。:D
我现在的代码思路是在
1.初始化一个NSInputStream,然后设置代理并且加入runloop
2.在Request把InputStream 加进去。
3.建立连接。
4.等待NSInputStream的回调方法,然后加入数据。
代码
NSMutableData *mutableData = [NSMutableData dataWithLength:uploadData.length];
self.inputStream = [NSInputStream inputStreamWithData:mutableData];
self.inputStream.delegate =self;
[self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.inputStream open];
[request setHTTPBodyStream:self.inputStream];
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
// delegate
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
switch (eventCode) {
case NSStreamEventOpenCompleted: {
NSLog(@"producer stream opened");
} break;
case NSStreamEventHasBytesAvailable: {
// 这里写入buffer
NSLog(@"NSStreamEventHasBytesAvailable");
}
}
现在的问题:
1.初始化流时,发送Stream的大小是否为初始化传入Data的大小?
NSMutableData *mutableData = [NSMutableData dataWithLength:uploadData.length];
self.inputStream = [NSInputStream inputStreamWithData:mutableData];
2.我打印日志发现connection是在流写入完成之后然后才建立连接发送数据的。能否做到先建立Connection然后自己主动调用Stream同步方法往里面写数据,这时候已经开始传入数据了(现在使用的是stream的回调方法)?
这里先谢谢各位大牛。:D