2014-02-16 29 views
2

我有這段代碼,我一直在嘗試移植。該代碼使用WinHTTP實現在窗口上100%正常工作。在IOS 7模擬器上,我使用NSURLSession。對於常規的HTTPS get/post似乎工作正常。Streaming/Chunked HTTP和NSURLSession掛起

當我使用「流式傳輸」HTTP時,事情開始崩潰。在這種情況下,內容長度是未知的,因爲數據連續流入。

我有一個阻塞同步低於呼叫,將等待,直到當前的請求完成。當我使用第一個命令時,同步循環將在委託命中後退出。但是,如果我用註釋的第二行替換,則同步循環會掛起。

 [m_pDelegate.session invalidateAndCancel]; 
//  [m_pDelegate.session finishTasksAndInvalidate]; 
blockUntilOperationsComplete(); 

最終它會退出,我確實收到了我的數據回調。我相信後面的回調最終會觸發MINUTES,因爲小保持活動消息(最長16字節)最終會溢出緩衝區並觸發委託調用。有沒有辦法減少緩衝閾值?

回答

7

在浪費了2天的時間之後,我會把這個留給下一個來的靈魂。無法通過現有NSURL *類來減少此緩衝區。事實證明,當前的實現(在iOS7上,似乎永遠是這樣的),因爲分塊編碼通過等待512字節的塊編碼有效載荷進行收集來緩衝傳入數據,並且只有在回調將發生之後 - 重要的部分如下 - 如果Content-Type是「text/html」。之後,所有下面的流量觸發回調將實時發生。

但是,如果服務器將Content-Type頭部更改爲「application/json」,它將不會被緩存,並且只要實際收到某個東西,就會觸發回調。

+0

不幸的是,NSURLSession仍然如此......解決方法是修改服務非常難過。 – Kekoa