2016-05-23 6 views
3

Ich habe ein Programm zur Kommunikation http2 mit NSURLSession von iOS9 implementiert, und es kann mit meinem Server in http2 kommunizieren. Allerdings habe ich ein Problem mit empfangen server_push. Ich fand ENABLE_PUSH Wert ist 0 in ihren Einstellungen, und es gibt keinen Delegaten in Empfangsserver Push in NSURLSession ...Http/2 server_push mit NSURLSession

· Ich denke NSURLSession unterstützt server_push nicht. Ist das richtig?

· Wenn es server_push unterstützt, wie zu verwenden?

/** 
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

Hallo T_ms, willkommen in SO. Sie sollten Ihren Code posten und angeben, welche Art von Empfangsproblem Sie erhalten. –

+0

Hallo J.Chomel, danke für deinen Ratschlag :-) Ich habe gepostet! –

Antwort

0

Gelöst

ich von der Unterstützung folgende Antwort erhalten.

iOS unterstützt dies derzeit nicht.


Update

(@ vin25 Kommentar)

ios10 unterstützt.

+0

Irgendwelche Updates dazu? Wurde Unterstützung für iOS 10 hinzugefügt? – vin25

+0

@ vin25 Noch nicht .... –

+1

Vor kurzem herausgefunden, dass iOS 10 es unterstützt. Siehe WWDC 2016 Video auf NSURLSession- https://developer.apple.com/videos/play/wwdc2016/711/. Ich habe es getestet und es funktioniert super! – vin25

0

Ich lese diese here:

Der HTTP2 Push-Mechanismus ist nicht ein allgemeiner Server-Push-Mechanismus wie websocket oder Server gesendet Ereignisse.

Es wurde für eine spezifische Optimierung von HTTP-Konversationen entwickelt. Insbesondere wenn ein Client nach einer Ressource fragt (zB index.html) kann der Server erraten, dass er als nächstes nach einer Menge von zugeordneten Ressourcen fragt (zB theme.css, jquery.js, logo.png, etc.) usw.) In der Regel kann eine Webseite zehn solcher Anfragen enthalten.

Mit HTTP/1.1 musste der Server warten, bis der Client tatsächlich Anfrage für diese zugeordneten Ressourcen sendet, und dann wird der Client von Verbindungen beschränkt, um nur für ca. 6 auf einmal zu fragen. So kann es viele Rundreisen dauern, bevor alle erforderlichen Ressourcen, die von einer Webseite benötigt werden, tatsächlich gesendet werden.

Mit HTTP/2, wobei der Server in der Antwort auf die senden kann Push index.html GET verspricht den Kunden zu sagen, dass es auch theme.css, jquery.js wird schicken, logo.png, etc Als ob der Kunde angefordert hätte. Der Client kann dann diese Pushs abbrechen oder einfach darauf warten, dass sie an gesendet werden, ohne die zusätzliche Latenz von mehreren Rundreisen zu erleiden.

ere ist ein Blog über die Push-API für HTTP2 und SPDY in Anlegesteg: https://webtide.com/http2-push-with-experimental-servlet-api/

+0

Vielen Dank für Ihre Information! Kannst du mir sagen, ob du weißt, dass NSURLSession dies unterstützt oder nicht? –

+0

ja .....und Die HTTP/2-Unterstützung ist Teil von iOS 9 und wird daher in früheren Betriebssystemversionen nicht verfügbar sein. –

+0

Hmm ... Ich kann sehen, dass nur iOS9 (oder höher) Http/2 unterstützt ... aber ich weiß nicht, ob iOS9's Kakao API die Funktion von SURVER_PUSH haben ...>< –