2016-05-23 88 views
3

我已經實現了一個使用iOS9的NSURLSession來傳遞http2的程序,並且它可以在http2中與我的服務器進行通信。 但是,收到server_push時遇到問題。 我發現他們的設置ENABLE_PUSH值爲0,並且在NSURLSession中沒有接收服務器推送中的委託...Http/2 server_push with NSURLSession

·我認爲NSURLSession不支持server_push。這是正確的嗎?

·如果它支持server_push,如何使用?

/** 
It WORKS for post data and get response. 
I don't know the code should be added here 
in order to get the server_push. 
I suspect that NSURLSession itself cannot receive the server_push(;_;) 
**/ 
- (void) postData 
{ 
    NSString *urlstr = self.urlArea.text; 
    NSURL * url = [NSURL URLWithString:urlstr]; 
    NSDictionary *params = @{@"data":@""}; 
    //json to query 
    NSData *query = [self buildQueryWithDictionary: params]; 

    //make request 
    NSMutableURLRequest *request = [NSMutableURLRequest 
           requestWithURL:url 
           cachePolicy: NSURLRequestReloadIgnoringCacheData 
           timeoutInterval: 10.0]; 
    [request setHTTPMethod: @"POST"]; 
    [request setHTTPBody: query]; 

    //prepare session 
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 

    //resume 
    [[session dataTaskWithRequest: request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 
    { 
     if (response && ! error) { 
      NSLog(@"Data: %@", [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]); 
     }else { 
      NSLog(@"ERR: %@", error); 
     } 
    }] resume]; 
} 
+0

嗨T_ms,歡迎來到SO。你應該發佈你的代碼,並詳細說明你得到的是什麼類型的接收問題。 –

+0

嗨J.Chomel,你的建議thanx :-)我張貼! –

回答

0

解決

我後接收到的支持的答覆。

iOS目前不支持此操作。


更新

(@ vin25評論)

ios10支持它。

+0

有關此更新的任何更新?已經支持這個已被添加到iOS 10? – vin25

+0

@ vin25尚未...... –

+1

最近發現iOS 10確實支持它。請參閱NSURLSession上的WWDC 2016視頻 - https://developer.apple.com/videos/play/wwdc2016/711/。我已經測試過它,它的工作很棒! – vin25

0

我讀這here

的HTTP2推送機制不是一般的服務器推送機制像 的WebSocket或服務器發送事件。

它被設計用於特定的HTTP會話優化。 特別是當一個客戶端要求資源時(例如index.html),服務器可以猜測它會接下來要求一組關聯資源(例如theme.css,jquery.js,logo.png等)。等等) 通常一個網頁可以有10個這樣的相關請求。

對於HTTP/1.1,服務器必須等到客戶端實際發送 請求這些關聯的資源,然後通過連接客戶端被限制爲 ,一次只需要約6個請求。因此,在實際發送網頁所需的所有關聯資源 之前,可能需要多次往返。

隨着HTTP/2,服務器可以在響應發送的index.html GET 推許諾告訴客戶端,它是要還派 theme.css,的jquery.js,logo.png等就好像客戶已經要求 他們一樣。然後客戶端可以取消這些推送,或者等待他們發​​送,而不會引起多次往返的額外延遲。

ERE是關於在碼頭推送API的HTTP2和SPDY博客: https://webtide.com/http2-push-with-experimental-servlet-api/

+0

謝謝您的信息!你能告訴我,如果你知道NSURLSession支持這個或沒有? –

+0

是.....HTTP/2支持是iOS 9的一部分,因此在早期的操作系統版本中不可用。 –

+0

嗯...我可以看到只有iOS9(或更高版本)支持Http/2 ...但我不知道iOS9的可可API是否具有SURVER_PUSH的功能...>< –