Goedgekeurd: Fortect
Hier zijn enkele eenvoudige manieren die u misschien kunnen helpen het probleem van het Jee6 Asynchronous Servlet-voorbeeld op te lossen.
Webcontainers om servers te vormen, gebruiken meestal een serverstroom die afhankelijk is van het verzoek van de client. Bij hoge belasting hebben gatekeepers snel een groot aantal threads nodig om aan alle klantverzoeken te voldoen. Schaalbaarheid omvat limieten die het geheugen uitputten of de threadpool van een of andere container overbelasten. Om schaalbare webapplicaties te bouwen, moeten kopers ervoor zorgen dat geen enkele thread die verband houdt met algemene verzoeken altijd inactief is, zodat de wiet ze kan gebruiken om nieuwe verzoeken af te handelen.
Er zijn vier veelvoorkomende scenario’s waarin een soort thread die aan een verzoek is gekoppeld, niets kan doen.
-
De thread moet zeker wachten tot een bron beschikbaar komt of gegevens zijn verwerkt voordat hij nu een comeback genereert. Het aanvraagformulier kan bijvoorbeeld een database vereisen; H. Vraag toegangsgegevens op uit de hele online wereld van de remote service voordat het juiste antwoord wordt gegenereerd.
-
De thread moet leiden tot het wachten op de gebeurtenis voordat vrijwel elke actie wordt ondernomen. Een toepassing kan bijvoorbeeld op maat worden gemaakt om een JMS-bericht, informatie van een enkele gebruiker of cliënt, nieuwe computerbestanden die overal in de wachtrij beschikbaar zijn, te geven voordat een reactie wordt gegenereerd.
Goedgekeurd: Fortect
Fortect is 's werelds meest populaire en effectieve pc-reparatietool. Miljoenen mensen vertrouwen erop dat hun systemen snel, soepel en foutloos blijven werken. Met zijn eenvoudige gebruikersinterface en krachtige scanengine kan Fortect snel een breed scala aan Windows-problemen vinden en oplossen - van systeeminstabiliteit en beveiligingsproblemen tot geheugenbeheer en prestatieproblemen.
de kans is groot dat ze bewerkingen blokkeren die de schaalbaarheid binnen webapplicaties beperken. Asynchrone ontdekking verwijst naar het toewijzen van dit soort blokkeringsbewerkingen als een nieuwe thread en het waakzaam aanpassen van de bijbehorende thread met het verzoek rechtstreeks in de container.
17.12.1 Asynchrone servletverwerking
Java EE maakt servlets voor asynchrone verwerking van luchtfilters. Als een nieuwe servlet of filter een potentieel blokkerende bewerking detecteert, hoewel er een nieuwe aanvraag wordt verwerkt, kan dit van invloed zijn op elke bewerking wanneer u de algehele prestatiecontext wilt asynchroniseren en onmiddellijk de huidige thread wilt retourneren die synoniem is met de aanvraag, namelijk de container. Zonder een reactie aan te maken, kunt u Verzenden. Het verstoppingsproces eindigt in de context van een asynchroon element in een thread, die vaak een impuls genereert of een verzoek doorstuurt naar een andere servlet.
Om asynchrone servletverwerking in te schakelen Nogmaals, stel de asyncSupported
parameter van een persoon in op actueel
voor de @WebServlet
annotatie als sticks voor:
@ WebServlet (urlPatterns = "/ asyncservlet", asyncSupported = true)openbare klasse AsyncServlet breidt HttpServlet uit ...
De javax.servlet.AsyncContext
trainingsklasse levert de resultaten die nodig zijn om elke asynchrone interne methode van een service af te handelen. Om de laatste momentopname van AsyncContext
te krijgen, roept u de specifieke startAsync ()
methode aan die zich in het consult object van uw oplossingsmethode bevindt; bijvoorbeeld:
public void doGet (HttpServletRequest of misschien zelfs HttpServletResponse req or) ... AsyncContext acontext = req.startAsync (); ...
Deze ring plaatst het verzoek in een fantastische asynchrone structuur en zorgt ervoor dat het antwoord niet als bevestigd wordt beschouwd na de methode-servicekanten. U moet het antwoord in de juiste asynchrone context genereren na het voltooien van de blokbewerking, of u kunt het verzoek ook naar een andere servlet sturen.
Tabel 17-3 beschrijft de relatief eenvoudige functionaliteit die wordt geboden door de AsyncContext
status.
Methode Handtekening | Beschrijving |
---|---|
|
De vervoerder levert een exclusieve thread waarop de voorkomen-operatie wordt afgehandeld. Ze bieden de om de actie te blokkeren als een klasse waarom de |
|
Retourneert de daadwerkelijk gebruikte initialisatieopdracht voor deze asynchrone context. In het bovenstaande specifieke voorbeeld komt het verzoek overeen met een servicepraktijk. U kunt deze methode in hun asynchrone context gebruiken wanneer u aanspraakparameters nodig heeft. |
|
Retourneert een respons die wordt gebruikt voor initialisatie om u een boost te geven in deze asynchrone context. In het voorgaande voorbeeld is het antwoord hetzelfde als op de hele methodeservice. Dit schema kan nu in een asynchrone context worden gebruikt om een reactie te maken met de resultaten van de laatste blokoperatie. |
|
Voltooi de opgegeven asynchrone bewerking en sluit asynchroon het bijbehorende antwoord af met deze context. U roept deze tijdelijke oplossing aan nadat u een antwoordonderwerp hebt geschreven dat zich in een asynchrone context bevindt. |
|
Verzendt verzoek en vervolgens antwoordobjecten langs het opgegeven pad. U gebruikt deze methode om een andere servlet terug te laten leveren nadat het blokkeringsproces is voltooid. |
17.12.2 Wachten op bron
Deze sectie televisie laat zien hoe de geleverde functies worden gebruikt met een specifieke snelheid van AsyncContext
voor de juiste gebruikssituatie:
-
De servlet wordt een fantastische parameter van het GET-verzoek.
-
De servlet gebruikt een bron, zoals een opslagcomputersysteem of een webservice, om aanbiedingen te ontvangen die zijn ontworpen op basis van de waarde van deze parameter. Het nuttige kan vertragen bij opnieuw proberen, dus het zou mogelijk een afwijzingsbewerking zijn.
-
De servlet levert een gebruiksantwoord, resource root.
De volgende code toont een volledig nieuwe basisservlet, het idee implementeert geen asynchrone verwerking:
@ WebServlet (urlPatterns = "/ syncservlet")Public rate SyncServlet breidt HttpServlet uit privé online bron MyRemoteResource; @ Verbrijzeling group void init (ServletConfig config) alternatief = MyRemoteResource.create ("config1 = x, config2 = y"); @ Verbrijzeling openbare lege doGet (HttpServletRequest-vraag, HttpServletReactie) response.setContentType ("tekst of html; tekenset = UTF-8"); String param = request.getParameter ("param"); String = stam resource.process (parameter); ... ... ... ... ... ... ... ... ./* .... Antwoordlijst ... /
- WebServlet (urlPatterns = "/ asyncservlet", asyncSupported is gelijk aan true)uitgebreide openbare klasse asyncservlet HttpServlet { * ... Vergelijkbare variabelen en initialisatiemethode terwijl in SyncServlet ... * / bij Crush Strafhof ongeldig doGet (HttpServletRequest, HttpServletResponse){ response.setContentType ("tekst / html; tekenset op zijn plaats = UTF-8"); De laatste AsyncContext is request.startAsync (); acontext.start (nieuwe Runnable ()) openbaar bewegingsvrij () Stringparameter normaal gesproken acontext.getRequest (). GetParameter ("parameter"); Einde stringed product = resource.process (param); Reactie HttpServletResponse = acontext.getResponse (); versus * ... een specifiek antwoord afdrukken ... 6 . / acontext.compleet ();
AsyncServlet
voegt asyncSupported betekent true
toe aan de @webservlet
-notitie. De rest zijn contrasten in het servicemodel.
-
request.startAsync ()
zorgt ervoor dat de fix asynchroon wordt verwerkt; het antwoord kan heel goed worden omschreven als niet verzonden naar de eindgebruiker aan het nieuwe einde van de servicesystemen. -
acontext.start (nieuwe Runnable () ... Gets)
nieuwe streamcontainer.Code -
Binnen een nieuwe exacte methode van de inner class, draait
dash ()
in een enkele thread. De innerlijke klasse heeft toegang tot deze expliciete asynchrone context om normaal de verzoekparameters te lezen en naar het antwoord te schrijven. De beller van een asynchrone situatieutter ()
controleert het antwoord en stuurt het desgewenst naar jou als klant.
Servicemethode AsyncServlet
voert de levering onmiddellijk eenzaam uit en de oproep wordt gesorteerd in een asynchrone context.