Gdy wiadomość HTTP jest dekodowany przez HttpObjectDecoder
dekoder wytwarza następujące obiekty:
HttpRequest
lub HttpResponse
który zapewnia właściwości dekodowane z linii początkowej i jego nagłówkami.
- Seria
HttpContent
. Ostatni HttpContent
jest LastHttpContent
.
Typowy kod obsługi będzie wyglądać następująco:
if (msg instanceof HttpRequest) {
...
}
if (msg instanceof HttpContent) {
...
if (msg instanceof LastHttpContent) {
...
}
}
Należy pamiętać, że if
bloki nie wykluczają się wzajemnie, a więc handler nie powróci, gdy jeden z 3 warunków powyższe jest spełnione. Zajrzyj do HttpSnoopServerHandler, aby uzyskać konkretny przykład.
Teraz spójrzmy na FullHttpRequest
. Implementuje on kod: HttpRequest
, i. Dobrze napisany program obsługi powinien działać po włożeniu HttpObjectAggregator
do potoku bez zmiany jakiegokolwiek kodu.
Intencją tej dziwacznie wyglądającej hierarchii klas jest umożliwienie użytkownikowi wyboru użycia HttpObjectAggregator
lub nie.
Jednakże zgadzam się, że nie jest to intuicyjne. Naprawimy to w Netty 5 w taki sposób, że dekoder produkuje tylko jeden obiekt wiadomości HTTP i przesyła strumieniowo jego zawartość do niego później.
Dzięki. Przepraszamy za późne oznaczenie. – smwikipedia
Bez problemu. Cieszę się, że to było pomocne. – trustin
@trustin: więc mówisz, że kiedy wstawiliśmy HttpObjectAggregator do potoku, otrzymamy obiekt FullHttpRequest z całą zawartością ładunku? dzięki .. – Sudheera