【问题标题】:NSURLRequest with HTTPBody input stream: Stream sends event before being opened带有 HTTPBody 输入流的 NSURLRequest:流在打开之前发送事件
【发布时间】:2011-03-25 18:37:56
【问题描述】:

我想使用NSURLConnection(和NSURLRequest)向服务器发送大量数据。为此,我创建了一对绑定的NSStreams(使用CFStreamCreateBoundPair(...))。然后我将输入流传递给NSURLRequest (-setHTTPBodyStream:) 并在当前运行循环中安排输出流。当运行循环继续时,我得到发送数据的事件,输入流将此数据发送到服务器。

我的问题是,这仅在数据适合成对流之间的缓冲区时才有效。如果数据更大,那么输入流会以某种方式获得一个事件(我假设“字节可用”),但 NSURLConnection 尚未打开输入流。这会导致打印一条错误消息,并且不会发送数据。

我试图在我的-stream:handleEvent: 方法中捕获这一点,如果输入流尚未打开,则只需返回,但随后我的输出流会收到一个流关闭事件(可能是因为我从未发送过数据)。

所以我的问题是:如何正确使用 NSURLConnection 的绑定流对?

(如果这很重要:我正在 iOS 平台上开发)

感谢任何帮助!

干杯,马库斯

【问题讨论】:

    标签: iphone nsurlconnection nsstream


    【解决方案1】:

    好的,我通过延迟上传来解决这个问题,以便在NSURLConnection 有时间设置其输入流之后开始。

    不过,这不是我所说的干净解决方案,因为依赖 -performSelector:withObject:afterDelay: 似乎有点老套。

    因此,如果其他人对此有解决方案,我仍然愿意接受任何建议。

    【讨论】:

    • 我不能再访问这个项目了。但这只是这个(伪代码): StartNSURLConnection() Delay(1sec, { StartSendingDataToStream() })
    • 但正如我所说,不幸的是,这并不是一个真正稳定的解决方案。你应该看看 NSURLSession,他们可能改进了流处理:developer.apple.com/library/ios/documentation/Cocoa/Conceptual/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多