Quando un messaggio HTTP viene decodificato da un HttpObjectDecoder
, il decodificatore produce i seguenti oggetti:
- Un
HttpRequest
o un HttpResponse
che fornisce le proprietà decodificati dalla linea iniziale ei suoi seguenti intestazioni.
- 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.
Grazie. Ci scusiamo per la marcatura in ritardo. – smwikipedia
Nessun problema. Sono contento che sia stato utile. – trustin
@trustin: quindi stai dicendo che quando abbiamo inserito HttpObjectAggregator nella pipeline, otteniamo l'oggetto FullHttpRequest con tutto il contenuto del payload? grazie .. – Sudheera