2015-03-23 4 views

Odpowiedz

14

Gdy wiadomość HTTP jest dekodowany przez HttpObjectDecoder dekoder wytwarza następujące obiekty:

  1. HttpRequest lub HttpResponse który zapewnia właściwości dekodowane z linii początkowej i jego nagłówkami.
  2. 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.

+0

Dzięki. Przepraszamy za późne oznaczenie. – smwikipedia

+0

Bez problemu. Cieszę się, że to było pomocne. – trustin

+0

@trustin: więc mówisz, że kiedy wstawiliśmy HttpObjectAggregator do potoku, otrzymamy obiekt FullHttpRequest z całą zawartością ładunku? dzięki .. – Sudheera

Powiązane problemy