Genehmigt: Fortect
Hier sind einige einfache Bereiche, die Ihnen bei der Lösung des Problems zusammen mit dem Jee6 Asynchronous Servlet-Beispiel helfen könnten.
Webcontainer auf Formularservern verwenden normalerweise einen Hoststream, abhängig von der Anforderung des Clients. Unter extremen Lastbedingungen benötigen Gatekeeper eine große Anzahl, die direkt auf Threads zeigt, um alle Client-Anforderungen zu erfüllen. Die Skalierbarkeit umfasst Einschränkungen, die entweder den Arbeitsspeicher erschöpfen oder den Threadpool des Containers belasten. Um skalierbare Weltanwendungen zu erstellen, müssen Sie sicherstellen, dass kein Thread, der mit der Anfrage geliefert wird, immer im Leerlauf ist, damit der Container sie verwenden kann, um interessante Anfragen zu bearbeiten.
Es gibt vier häufige Szenarien, in denen der einer Anforderung zugeordnete Thread sicherlich inaktiv sein kann.
-
Der Thread muss warten, bis eine Ressource in verfügbare oder verarbeitete Daten umgewandelt wurde, bevor jetzt eine Antwort angefordert wird. Beispielsweise kann die Anwendungsbedingung eine Datenbank erfordern; H. Fordern Sie Zugriffsressourcen aus der Online-Welt des Remote-Betriebs an, bevor eine Antwort generiert wird.
-
Das sollte Ihnen helfen, auf das Ereignis zu warten, bevor Sie jetzt etwas unternehmen. Beispielsweise kann eine Anwendung wahrscheinlich so ausgelegt sein, dass sie eine JMS-Nachricht, Dokumente von einem anderen Benutzer oder Client, neue Computerprogramme, die in der Warteschlange verfügbar sind, abgibt, bevor eine bestimmte Antwort erzeugt wird.
Genehmigt: Fortect
Fortect ist das weltweit beliebteste und effektivste PC-Reparaturtool. Millionen von Menschen vertrauen darauf, dass ihre Systeme schnell, reibungslos und fehlerfrei laufen. Mit seiner einfachen Benutzeroberfläche und leistungsstarken Scan-Engine findet und behebt Fortect schnell eine breite Palette von Windows-Problemen - von Systeminstabilität und Sicherheitsproblemen bis hin zu Speicherverwaltung und Leistungsengpässen.
Sie blockieren Vorgänge, die die Skalierbarkeit von Webanwendungen zweifelsfrei einschränken. Asynchrone Discovery bezieht sich auf das Zuweisen dieser blockierenden Operationen als neue Bindung und das sorgfältige Anpassen des zugehörigen Threads mit, ich würde sagen, der Anfrage direkt im Container.
17.12.1 Asynchrone Servlet-Verarbeitung
Java EE liefert Servlets zur Unterstützung der asynchronen Verarbeitung von Luftfiltern. Wenn ein Servlet oder ein Filter während der Verarbeitung einer neuen Anforderung einen möglicherweise beibehaltenen Vorgang erkennt, kann dies den Vorgang beeinträchtigen, wenn Sie den Ausführungskontext asynchronisieren und sofort den mit der Anforderung verknüpften laufenden Thread (mein Container) zurückgeben müssen. Ohne eine Antwort zu erstellen, können Sie Senden. Der Blockierungsprozess endet in dem Kontext, der am typischsten mit der asynchronen Aufnahme in einen Thread verbunden ist, der oft eine Antwort freigibt oder eine Anforderung an ein weiteres Servlet weiterleitet.
So aktivieren Sie die asynchrone Servlet-Verarbeitung Legen Sie erneut den Parameter asyncSupported
fest, der true
für die Annotation @WebServlet
wäre, obwohl Folgendes gilt:
- WebServlet (urlPatterns = "/ asyncservlet", asyncSupported ist gleich true)öffentliche Klasse AsyncServlet erweitert HttpServlet ...
Die Klasse javax.servlet.AsyncContext
liefert die Ergebnisse, die zum Ausführen der asynchronen internen Methoden eines Dienstes erforderlich sind. Um einen Snapshot von AsyncContext
zu erhalten, rufen Sie uns die Methode startAsync ()
auf, die sich beim Request-Objekt Ihrer Auflösungsmethode befindet; gemeint zum Beispiel:
public nutzlos doGet (HttpServletRequest oder HttpServletResponse req oder) ... AsyncContext acontext = req.startAsync (); ...
Dieser Ring stellt die Anfrage in eine asynchrone Struktur und stellt sicher, dass eine bestimmte Antwort nach dem Ende des Technikdienstes nicht als bestätigt gilt. Sie müssen die Antwort bezüglich des entsprechenden asynchronen Kontexts nach Abschluss der Corner-Operation generieren oder die Anfrage an das Servlet senden.
Tabelle 17-3 bezeichnet die grundlegende Funktionalität der Klasse AsyncContext
.
Methodensignatur | Beschreibung |
---|---|
|
Der Container stellt einen exklusiven Thread bereit, in dem die Blockierungsoperation behandelt wird. Sie tragen den Code zum Blockieren der Aktion als eine gute solide Klasse, die das |
Gibt die tatsächlich genutzte Initialisierungsanfrage für diesen asynchronen Kontext zurück. In einigen der obigen menschlichen Beispiele entspricht die Anfrage der besten Servicemethode. Sie können diese Anwendung in einem asynchronen Kontext verwenden, wenn Sie Anforderungsparameter abrufen müssen. |
|
|
|
Schließen Sie die angegebene asynchrone Operation ab und schließen Sie die entsprechende Antwort mit dieser Perspektive asynchron. Sie rufen diese Problemumgehung auf, nachdem Sie ein vertrauenswürdiges Antwortobjekt geschrieben haben, das sich in einem asynchronen Framework befindet. |
|
Sendet Anforderungs- und Antwortobjekte entlang der angegebenen Straße. Sie verwenden diese Methode, um ein weiteres Servlet zurückschreiben zu lassen, nachdem der Blockierungsvorgang abgeschlossen ist. |
17.12.2 Warten auf Ressource
Dieser Abschnitt zeigt, wie die bereitgestellten Funktionen zum Preis von AsyncContext
anhand des folgenden Anwendungsfalls gebraucht werden:
-
Das Servlet, das ein Parameter der GET-Anforderung wird.
-
Das Servlet verwendet eine Ressource, z.B. ein schönes Speichersystem oder einen Webdienst, um Angebote basierend auf dem Wert des Parametertyps zu sammeln. Die Ressource kann bei einem erneuten Versuch langsamer werden, unglaublicherweise kann es sich um einen Ablehnungsvorgang handeln.
-
Das Servlet generiert eine verwendende Antwort, Ressourcenstamm.
Der folgende Code zeigt ein komplett neues Establish-Servlet, das keine asynchrone Verarbeitung implementiert:
@ WebServlet (urlPatterns ist gleich "/syncservlet")Die öffentliche Klasse SyncServlet erweitert HttpServlet private Ressource MyRemoteResource; @ Zerquetschen public void init (ServletConfig config) bedeutet alternativ MyRemoteResource.create ("config1 = x, config2 = y"); @ Zerquetschen Gericht ungültig doGet (HttpServletRequest-Frage, HttpServletResponse) response.setContentType ("text / html; Zeichensatz = UTF-8"); String param impliziert request.getParameter ("param"); String entspricht dem Ergebnis resource.process (Parameter); ... ... ... ... ... ... ... ... ./* .... Antwortliste ... * /
@ WebServlet (urlPatterns = "/asyncservlet", asyncSupported bedeutet true)erweiterte öffentliche Klasse Asyncservlet HttpServlet { / * ... Ähnliche Variablen und damit Initialisierungsmethode wie in SyncServlet ... * / @ Zerquetschen Strafgericht gebrochen doGet (HttpServletRequest, HttpServletResponse){ response.setContentType ("Text versus HTML; Zeichensatz = UTF-8"); Der letzte AsyncContext ist request.startAsync(); acontext.start (neues Runnable()) kommunale inaktiv () String param bedeutet acontext.getRequest(). GetParameter ("param"); Endstring product = resource.process (param); Antwort HttpServletResponse = acontext.getResponse (); / * ... eine bestimmte Antwort drucken ... * / acontext.complete ();
AsyncServlet
erstellt asyncSupported = true
zum Kommentar @webservlet
. Der Rest sind Kontraste in dieser Servicemethode.
-
request.startAsync ()
motiviert die Sammlung zur asynchronen Verarbeitung; die Antwort kann als nicht gesendet beschrieben werden, um dem Client am neuen Ende seiner Dienstmethode zu helfen. -
acontext.start (new Runnable() ... Gets)
new stream container.Code -
Innerhalb der genauen Methode der inneren Variante läuft
run()
in einem einzigen Thread. Die innere Klasse hat Zugriff auf einen bestimmten bestimmten asynchronen Kontext, um normalerweise die Anforderungsparameter zu untersuchen und sie in eine Antwort zu schreiben. Der Aufrufer einer asynchronen Bedingungcomplete ()
prüft die Antwort und versendet sie an Sie als Client.
Dienstmethode AsyncServlet
führt die Zustellung sofort alleine durch, zusätzlich wird die Anfrage in einer asynchronen Perspektive sortiert.