Zatwierdzono: Fortect
Oto kilka prostych sposobów, które mogą pomóc w rozwiązaniu problemu z przykładem asynchronicznego serwletu Jee6.
Kontenery internetowe na serwerach formularzy zazwyczaj korzystają ze strumienia serwera w zależności od petycji klienta. W warunkach dużego obciążenia strażnicy wymagają bezpośrednio kluczowej liczby wątków, aby spełnić wszystkie żądania klientów. Skalowalność obejmuje ograniczenia, które wyczerpują pamięć lub przeciążają pulę wątków kontenera. Aby zbudować skalowalne aplikacje internetowe, należy upewnić się, że wątek ‘ skojarzony z żądaniem jest zawsze znudzony, aby kontener mógł ich używać do obsługi nowych żądań.
Istnieją cztery standardowe scenariusze, w których wątek związany z ogromnym żądaniem może być bezczynny.
-
Wątek musi poczekać na udostępnienie przewodnika lub ulepszenie danych przed wygenerowaniem odpowiedzi. Na przykład, w jaki sposób formularz wniosku może wymagać bazy danych; H. Żądaj danych dostępowych ze świata online usługi zdalnej, zanim zostanie wygenerowana odpowiedź.
-
Wątek powinien pomóc w oczekiwaniu na nowe wydarzenie przed podjęciem jakichkolwiek działań. Na przykład nowa aplikacja może być zaprojektowana do wysyłania wiadomości JMS, informacji od innego użytkownika lub klienta, wspaniałych nowych plików komputerowych dostępnych w kolejce przed skonstruowaniem odpowiedzi.
Zatwierdzono: Fortect
Fortect to najpopularniejsze i najskuteczniejsze narzędzie do naprawy komputerów na świecie. Miliony ludzi ufają, że ich systemy działają szybko, płynnie i bez błędów. Dzięki prostemu interfejsowi użytkownika i potężnemu silnikowi skanowania, Fortect szybko znajduje i naprawia szeroki zakres problemów z systemem Windows - od niestabilności systemu i problemów z bezpieczeństwem po zarządzanie pamięcią i wąskie gardła wydajności.
Blokują operacje, które ograniczają skalowalność aplikacji internetowych. Przełom asynchroniczny odnosi się do przypisania tych operacji blokowania jako zupełnie nowego wątku i ostrożnego dostosowania skojarzonego wiązania z żądaniem bezpośrednio w kontenerze.
17.12.1 Asynchroniczne przetwarzanie serwletów
Java EE tworzy serwlety do obsługi asynchronicznego przetwarzania filtrów ep. Jeśli serwlet lub filtr wykryje jakikolwiek rodzaj potencjalnie blokującej operacji podczas przetwarzania nowego wymagania, może to wpłynąć na operację, gdy szukasz asynchronizacji kontekstu wykonania i natychmiastowego dostarczenia bieżącego wątku skojarzonego z żądaniem, rozumiejąc, że jest to kontener. Bez tworzenia odpowiedzi możesz wysłać. Proces blokowania kończy się w kontekście asynchronicznego włączenia do wątku, co również często generuje odpowiedź lub przekazuje praktyczną aplikację do innego serwletu.
Aby ponownie włączyć asynchroniczne badanie serwletów, ustaw parametr asyncSupported
na rynku na true
dla adnotacji @WebServlet
w następujący sposób:
@ WebServlet (urlPatterns = "/ asyncservlet", asyncSupported równa się true)public class AsyncServlet rozszerza HttpServlet ...
Klasa javax.servlet.AsyncContext
udostępnia wyniki wymagane do obsługi asynchronicznych metod wewnętrznych jednej usługi. Aby uzyskać migawkę AsyncContext
, wywołaj sformułowanie startAsync()
znajdujące się w obiekcie żądania metody czyszczenia; na przykład:
public void doGet (HttpServletRequest lub HttpServletResponse req lub) ... AsyncContext acontext oznacza req.startAsync (); ...
Ten pierścień deponuje żądanie w strukturze asynchronicznej i specyficznej, że odpowiedź nie jest uważana za potwierdzoną, gdy tylko zakończy się usługa metody. Musisz wygenerować całą odpowiedź w odpowiednim kontekście asynchronicznym po podjęciu operacji blokowej lub wysłać żądanie, które może wykonać inny serwlet.
Tabela 17-3 opisuje podstawowe funkcje udostępniane przez wszystkie klasy AsyncContext
.
Podpis metody | Opis |
---|---|
|
Kontener udostępnia ekskluzywną linię, w której obsługiwana jest operacja blokowania. Dostarczają kod do blokowania projektu jako klasa implementująca interfejs |
|
Zwraca główne faktycznie użyte żądanie inicjalizacji dla tej asynchronicznej struktury. W powyższym przykładzie z człowiekiem żądanie pasuje do metody usługi. Możesz pomóc tej metodzie w kontekście asynchronicznym, gdy osoba potrzebuje uzyskać parametry żądania. |
|
Zwraca odpowiedź z drugiej ręki do inicjalizacji, aby pomóc w kontekście asynchronicznym. W powyższym przykładzie odpowiedź jest taka sama jak w całej metodzie usług eksperckich. Ten schemat może być używany w każdym kontekście asynchronicznym do napisania odpowiedzi z nowym wynikiem bieżącej operacji bloku. |
|
Zakończ określoną operację asynchroniczną i asynchronicznie zamknij odpowiednią odpowiedź, która ma ten kontekst. Nazywasz to obejście odpowiednim po napisaniu obiektu odpowiedzi, który jest w fantastycznym kontekście asynchronicznym. |
|
Wysyła obiekty żądania i odpowiedzi wzdłuż całej określonej ścieżki. Tę metodę stosuje się, aby inny serwlet zapisał po zakończeniu procesu uprzedzania. |
17.12.2 Oczekiwanie na zasób
W tej sekcji pokazano, w jaki sposób dostarczone serwisy są wykorzystywane z szybkością AsyncContext
w następującym przypadku użycia:
-
Aplet staje się parametrem żądania GET.
-
Serwlet używa zasobów, takich jak system pamięci masowej lub rozwiązania internetowe, aby otrzymywać oferty w oparciu o wartość utworzoną przez ten parametr. Zasób może zwolnić, aby spróbować ponownie, więc może to być odrzucenie zabiegu chirurgicznego.
-
Aplet generuje odpowiedź using, root witryny.
Poniższy kod przedstawia w 100% nowy serwlet podstawowy, który nie wykorzystuje przetwarzania asynchronicznego:
@ WebServlet (urlPatterns = "/ syncservlet")Klasa publiczna SyncServlet rozszerza HttpServlet zasób prywatny MyRemoteResource; - Zmiażdżyć publiczne void init (ServletConfig config) lub alternatywnie = MyRemoteResource.create ("config1 = x, config2 oznacza y"); @ Zmiażdżyć public void doGet (pytanie HttpServletRequest, HttpServletResponse) response.setContentType („tekst / html; zestaw znaków implikuje UTF-8”); Parametr ciągu = request.getParameter ("param"); String = wynik zasób.proces (parametr); ... ... ... ... ... ... ... ... ./* .... Lista odpowiedzi ... * /
@ WebServlet (urlPatterns oznacza "/ asyncservlet", asyncSupported = true)rozszerzona klasa publiczna asyncservlet HttpServlet { /*... Podobne aspekty i sposób inicjalizacji jak w SyncServlet...1. / @ Zmiażdżyć Sąd karny nieprawidłowy doGet (HttpServletRequest, HttpServletResponse){ response.setContentType ("tekst html; zestaw znaków = UTF-8"); Ostatni AsyncContext może request.startAsync (); acontext.start (nowy Runnable ()) publiczne nieaktywne () Parametr ciągu oznacza acontext.getRequest (). GetParameter ("parametr"); Produkt w ciągu końcowym = zasób.proces (param); Odpowiedź HttpServletResponse = acontext.getResponse (); / * ... wydrukuj tę konkretną odpowiedź ... * / acontext.complete ();
AsyncServlet
dodaje asyncSupported = true
do konkretnego komentarza @webservlet
. Reszta to różnice w sposobie obsługi.
-
request.startAsync ()
powoduje, że kolekcja jest przygotowywana asynchronicznie; odpowiedź można opisać jako niewysłaną aktualnie do klienta na nowym przystanku metody obsługi. -
acontext.start (new Runnable () ... Pobiera)
nowy pojemnik na wodę.Code -
Wewnątrz dokładnej metody typu klasy wewnętrznej,
run()
działa w odniesieniu do pojedynczego wątku. Klasa wewnętrzna jest otwarta na ten konkretny kontekst asynchroniczny, aby normalnie odczytywać parametry żądania i zapisywać je w odpowiedzi. Wywołujący jakąś asynchroniczną sytuacjęcomplete()
sprawdza interakcję i wysyła ją do ciebie jako program.
Metoda usługi AsyncServlet
wykonuje natychmiastowe wykonanie samodzielnie, a żądanie jest sortowane w pewnym kontekście asynchronicznym.