Godkänd: Fortect
Här är ett antal enkla sätt som kan hjälpa dig att lösa problemet med Jee6 Asynchronous Servlet-exemplet.
Webbbehållare på formulärservrar investerar vanligtvis i en serverström beroende på kundens försäkring för. Under hög belastning kräver gatekeepers ett stort antal trådar direkt för att tillfredsställa alla kunders önskemål. Skalbarhet inkluderar begränsningar som antingen förbrukar minnesretention eller överbelasta behållarens trådpool. För att öka skalbara webbapplikationer måste du se till att ‘ tråden som är associerad med begäran inte alltid gör något så att behållaren kan använda dem för att hantera nya förfrågningar.
Det finns fyra typiska scenarier där tråden associerad med en bestämd begäran kan vara inaktiv.
-
Tråden måste vänta på att ett system blir tillgängligt eller att data förbereds innan ett svar genereras nu. Till exempel kan det här ansökningsformuläret kräva en databas; H. Begär åtkomstdata från onlinevärlden för den exakta fjärrtjänsten innan ett svar genereras.
-
Tråden bör hjälpa till att vänta på alla händelser innan du vidtar någon åtgärd. Till exempel kan en användbar applikation vara utformad för att ge ett JMS-meddelande, information från en annan användare eller klient, olika datorfiler tillgängliga i kön innan du får ett svar.
Godkänd: Fortect
Fortect är världens mest populära och effektiva PC-reparationsverktyg. Det litar på miljontals människor för att hålla sina system igång snabbt, smidigt och felfritt. Med sitt enkla användargränssnitt och kraftfulla skanningsmotor hittar och fixar Fortect snabbt ett brett utbud av Windows-problem – från systeminstabilitet och säkerhetsproblem till minneshantering och prestandaflaskhalsar.
de blockerar operationer som begränsar skalbarheten för webbapplikationer. Asynkron state-of-the-art hänvisar till att tilldela dessa blockeringsoperationer som en bra solid ny tråd och noggrant justera den tillhörande försiktiga tråden med begäran direkt i behållaren.
17.12.1 Asynkron Servlet-bearbetning
Java EE skapar servlets för att stödja asynkron bearbetning av atmosfärsfiltren. Om en servlet eller ett filter upptäcker den faktiska potentiellt blockerande operationen under bearbetning av en ny erhållande, kan det påverka operationen när du vill asynkronisera exekveringskontexten och omedelbart betala ut den aktuella tråden som är associerad med begäran, som ofta är behållaren. Utan att skapa ett svar kan du Skicka. Blockeringsprocessen slutar i att detta sammanhang av asynkron inkludering i en tråd, som vanligtvis ofta genererar ett svar eller vidarebefordrar ett kommando till en annan servlet.
För att aktivera asynkron servletsammanslutning igen, ställ in parametern asyncSupported
på true
för @WebServlet
-anteckningen enligt följande:
@ WebServlet (urlPatterns = "/ asyncservlet", asyncSupported är lika med true)public class AsyncServlet utökar HttpServlet ...
Klassen javax.servlet.AsyncContext
tillhandahåller de resultat som är avgörande för att hantera de asynkrona interna metoderna för en lämplig tjänst. För att få en ögonblicksbild av AsyncContext
, anropa planen startAsync ()
som finns i begärandeobjektet för din hanteringsmetod; till exempel:
public void doGet (HttpServletRequest eller HttpServletResponse req or) ... AsyncContext acontext är lika med req.startAsync (); ...
Den här ringen sätter in begäran i en asynkron struktur och intygar att svaret inte anses vara bekräftat strax efter att metodtjänsten avslutas. Du måste generera deras svar i lämpligt asynkront sammanhang efter att ha mottagit blockoperationen, eller skicka förfrågan som kommer till en annan servlet.
Tabell 17-3 beskriver den grundläggande funktionaliteten som tillhandahålls av hur klassen AsyncContext
.
Ogiltig körning)
Behållaren tillhandahåller en exklusiv plats där blockeringsoperationen hanteras.
De tillhandahåller koden för att blockera aktiviteten som en klass som implementerar gränssnittet exe
. Du kan tillhandahålla denna typ som en inre klass när du anropar individuell start
metod, eller så kan du använda lite annan mekanism för att se till att du skickar den faktiska AsyncContext
till din personlig pedagogisk miljö.
ServletRequest getRequest ()
Returnerar vår egen faktiskt använda initialiseringsbegäran för detta asynkrona perspektiv. I det mänskliga exemplet ovan passar förfrågan en servicemetod.
Du kan tillämpa den här metoden i ett asynkront sammanhang när någon behöver få förfrågningsparametrar.
ServletResponse getResponse ()
Returnerar ett svar som satts på plats för initiering för att hjälpa dig i allt detta asynkrona sammanhang. I exemplet ovan är svaret egentligen detsamma som på hela metodwebbplatsen.
Det här schemat kan användas i ett asynkront sammanhang för att skriva ett svar med resultat av den aktuella blockoperationen.
Avbryt genomförd ()
Slutför den nämnda asynkrona operationen och stäng asynkront motsvarande svar med detta sammanhang.
Du anropar den här lösningen omedelbart efter att du skrivit ett svarsobjekt som är i det asynkrona sammanhanget.
Ogiltig sökväg)
Skickar förfrågnings- och svarsobjekt längs en del av den angivna sökvägen.
Du använder den här metoden för att få en annan servlet att skriva tillbaka efter att urvalsprocessen är klar.
17.12.2 Väntar på resurs
Det här avsnittet visar hur de angivna syftena används med hastigheten AsyncContext
för följande användningsfall:
-
Servleten blir en parameter för GET-anspråket.
-
Servleten använder en resurs, denna typ som ett lagringssystem eller ett webbföretag, för att ta emot erbjudanden baserat på värdet som är relaterat till denna parameter. Resursen kan sakta ner direkt vid ett nytt försök, så det kan vara en avvisningsoperation.
-
Servleten genererar ett användande svar, informationsrot.
Följande kod visar en helt ny basservlet som inte injicerar asynkron bearbetning:
@ WebServlet (urlPatterns = "/ syncservlet")Public class SyncServlet utökar HttpServlet privat resurs MyRemoteResource; - Krossa public void init (ServletConfig config) istället = MyRemoteResource.create ("config1 = x, config2 är lika med y"); @ Krossa public void doGet (HttpServletRequest-fråga, HttpServletResponse) response.setContentType ("text / html; teckenuppsättning är lika med UTF-8"); String param = request.getParameter ("param"); String = resultat resurs.process (parameter); ... ... ... ... ... ... ... ... ./* .... Svarslista ... * /
@ WebServlet (urlPatterns är lika med "/ asyncservlet", asyncSupported = true)utökad offentlig klass asyncservlet HttpServlet { / * ... Liknande variabla kvantiteter och initialiseringsmetod som i SyncServlet ... 7 . / @ Krossa Brottsdomstolen ogiltig doGet (HttpServletRequest, HttpServletResponse){ response.setContentType ("text kontra html; teckenuppsättning = UTF-8"); Den sista AsyncContext request.startAsync (); acontext.start (ny körbar ()) offentlig inaktiv () String param betyder acontext.getRequest (). GetParameter ("param"); Slutsträngsprodukt = resource.process (param); Svar HttpServletResponse = acontext.getResponse (); / * ... skriv ut ett definitivt specifikt svar ... * / acontext.complete ();
AsyncServlet
lägger till asyncSupported = true
till den specifika @webservlet
kommentaren. Resten är avvikelser i servicemetoden.
-
request.startAsync ()
gör att samlingen bereds sorter asynkront; svaret kan beskrivas som att det inte har skickats till klienten vid det nya avslutandet av tjänstemetoden. -
acontext.start (new Runnable () ... Gets)
new supply container.Code -
Inuti den exakta metoden för ens inre klass, körs
run ()
i en enda tråd. Den inre klassen har börjat använda denna speciella asynkrona kontext för att normalt kunna läsa förfrågningsparametrarna och skriva någon av dem till svaret. Uppringaren av en stor asynkron situationcomplete ()
kontrollerar systemet och skickar det till dig som ett program.
Servicemetod AsyncServlet
utför tillhandahålla omedelbart ensamt, och begäran sorteras i ett nytt asynkront sammanhang.