2015-03-23 25 views

risposta

14

Quando un messaggio HTTP viene decodificato da un HttpObjectDecoder, il decodificatore produce i seguenti oggetti:

  1. Un HttpRequest o un HttpResponse che fornisce le proprietà decodificati dalla linea iniziale ei suoi seguenti intestazioni.
  2. Una serie di HttpContent. L'ultimo HttpContent è LastHttpContent.

Un codice tipico gestore sarà simile alla seguente:

if (msg instanceof HttpRequest) { 
    ... 
} 
if (msg instanceof HttpContent) { 
    ... 
    if (msg instanceof LastHttpContent) { 
     ... 
    } 
} 

Si prega di notare che i if blocchi non si escludono a vicenda e quindi il gestore non restituisce quando una delle 3 condizioni di cui sopra è soddisfatta. Dai un'occhiata a HttpSnoopServerHandler per un esempio concreto.

Ora, diamo un'occhiata a FullHttpRequest. Implementa HttpRequest, HttpContent e LastHttpContent. Il gestore ben scritto dovrebbe funzionare solo quando abbiamo inserito HttpObjectAggregator nella pipeline senza modificare alcun codice.

Quindi, l'intenzione di questa strana gerarchia di classi è di consentire all'utente di scegliere di utilizzare HttpObjectAggregator o meno.

Tuttavia, sono d'accordo che questo non è intuitivo. Sistemeremo questo in Netty 5 in modo tale che il decodificatore produca solo un singolo oggetto messaggio HTTP e lo streaming in seguito.

+0

Grazie. Ci scusiamo per la marcatura in ritardo. – smwikipedia

+0

Nessun problema. Sono contento che sia stato utile. – trustin

+0

@trustin: quindi stai dicendo che quando abbiamo inserito HttpObjectAggregator nella pipeline, otteniamo l'oggetto FullHttpRequest con tutto il contenuto del payload? grazie .. – Sudheera