SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Async Servlets
&
NIO Connectors
Agenda
• Servlets
• Connectors
• Async Servlets
• Ausblick
07.08.2013 2
Servlets
07.08.2013 3
Aufbau
07.08.2013 4
Threading Model
07.08.2013 5
Thread
Thread
Thread
Thread
Thread
Threadpool
Web
Listener
Request
Socket
create
Response
Connector
Servlet
Servlet
ServletServlet.do…(Request, Respone)
Thread
Connectors
BIO/NIO/APR
07.08.2013 6
Tomcat Connectors
Java Blocking Connector Java Non Blocking Connector APR/native Connector
BIO NIO APR
Classname Http11Protocol Http11NioProtocol Http11AprProtocol
Tomcat Version 3.x onwards 6.x onwards 5.5.x onwards
Support Polling NO YES YES
Polling Size N/A maxConnections maxConnections
Read HTTP Request Blocking Non Blocking Blocking
Read HTTP Body Blocking Sim Blocking Blocking
Write HTTP Response Blocking Sim Blocking Blocking
Wait for next Request Blocking Non Blocking Non Blocking
SSL Support Java SSL Java SSL OpenSSL
SSL Handshake Blocking Non blocking Blocking
Max Connections maxConnections maxConnections maxConnections
07.08.2013 7
Quelle: http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#Connector_Comparison
Sim Blocking = „simulated blocking“
Fazit
• Während des Aufrufs der Methode
do[POST|GET|…] (…)
wird immer eine Thread pro Request
gebunden
• Was aber, wenn in der do-Methode selbst gewartet
wird?
• Der Thread wird nicht für den Thread Pool
freigegeben!
07.08.2013 8
Asynchronous Servlets
07.08.2013 9
Async(hronous) Serlvet
• Neu in Servlet 3.0 Spec (Tomcat 7)
• Ermöglichen das Lösen der HTTP Anfrage vom Aufruf
der do-Methode
07.08.2013 10
Konfiguration
• Per Annotiation
@WebServlet(…, asyncSupported=true)
• Web.xml
Wichtig: Jeder Filter vor dem Servlet muss ebenfalls so konfiguriert
sein!
07.08.2013 11
<servlet>
<description>xxx</description>
<servlet-name>xxx</servlet-name>
<servlet-class>com.xxx.yyy</servlet-class>
<async-supported>true</async-supported>
</servlet>
Verwendung
@Override
protected void doPost(final HttpServletRequest request, final HttpServletResponse
response) throws ServletException, IOException {
final AsyncContext context = request.startAsync();
context.start(new Runnable() {
@Override
public void run() {
doSomething(context);
context.complete();
}
}
}
07.08.2013 12
Ausblick
07.08.2013 13
Problem
• Beim Lesen der Daten aus dem InputStream wird
dennoch ein Thread blockiert
• Lesen ist blockiert und wartet auf Daten
• Besser: Nur Aktiv werden wenn auch Daten da sind
• Lösung: Servlet Spec 3.1 (Tomcat 8) – JSR 340
07.08.2013 14
JSR 340 - Non Blocking IO
• Neue Methoden in ServletInputStream Klasse:
o setReadListener(ReadListener listener)
o isReady():boolean
o isFinished(): boolean
• Neues Interface: ReadListener
07.08.2013 15
<interface>
ReadListener
onDataAvailable()
onAllDataRead()
onError(Throwable t)
Fragen?
07.08.2013 16

Weitere ähnliche Inhalte

Andere mochten auch

The Henley Group’s Market Outlook publication
The Henley Group’s Market Outlook publicationThe Henley Group’s Market Outlook publication
The Henley Group’s Market Outlook publicationPedrojnr55
 
Challenges, Differences and Basic Math for Mobile Ad Ops
Challenges, Differences and Basic Math for Mobile Ad OpsChallenges, Differences and Basic Math for Mobile Ad Ops
Challenges, Differences and Basic Math for Mobile Ad OpsKevin Schaum
 
Top jessica simpson shoes 2013
Top jessica simpson shoes 2013Top jessica simpson shoes 2013
Top jessica simpson shoes 2013foreverpink
 
Pasirupinkite savo kudikio draudimu
Pasirupinkite savo kudikio draudimuPasirupinkite savo kudikio draudimu
Pasirupinkite savo kudikio draudimuvivadraudimas
 
Top l.a.m.b. shoes 2013
Top l.a.m.b. shoes 2013Top l.a.m.b. shoes 2013
Top l.a.m.b. shoes 2013foreverpink
 
Scrum training for team
Scrum training for teamScrum training for team
Scrum training for teamJohny_zhang
 
本部案アンケート結果
本部案アンケート結果本部案アンケート結果
本部案アンケート結果shibucho
 
Kada reikia grazinti draudimo ismoka
Kada reikia grazinti draudimo ismokaKada reikia grazinti draudimo ismoka
Kada reikia grazinti draudimo ismokavivadraudimas
 
Финансовые и корпоративные расследования
Финансовые и корпоративные расследованияФинансовые и корпоративные расследования
Финансовые и корпоративные расследованияG-IB
 

Andere mochten auch (14)

The Henley Group’s Market Outlook publication
The Henley Group’s Market Outlook publicationThe Henley Group’s Market Outlook publication
The Henley Group’s Market Outlook publication
 
Chapter01
Chapter01Chapter01
Chapter01
 
Challenges, Differences and Basic Math for Mobile Ad Ops
Challenges, Differences and Basic Math for Mobile Ad OpsChallenges, Differences and Basic Math for Mobile Ad Ops
Challenges, Differences and Basic Math for Mobile Ad Ops
 
Top jessica simpson shoes 2013
Top jessica simpson shoes 2013Top jessica simpson shoes 2013
Top jessica simpson shoes 2013
 
Pasirupinkite savo kudikio draudimu
Pasirupinkite savo kudikio draudimuPasirupinkite savo kudikio draudimu
Pasirupinkite savo kudikio draudimu
 
Top l.a.m.b. shoes 2013
Top l.a.m.b. shoes 2013Top l.a.m.b. shoes 2013
Top l.a.m.b. shoes 2013
 
Ch1 v1
Ch1 v1Ch1 v1
Ch1 v1
 
Ch6 2 v1
Ch6 2 v1Ch6 2 v1
Ch6 2 v1
 
UNO (Unlimited Network of Opportunities International Corporation) KSA(Kingdo...
UNO (Unlimited Network of Opportunities International Corporation) KSA(Kingdo...UNO (Unlimited Network of Opportunities International Corporation) KSA(Kingdo...
UNO (Unlimited Network of Opportunities International Corporation) KSA(Kingdo...
 
Scrum training for team
Scrum training for teamScrum training for team
Scrum training for team
 
本部案アンケート結果
本部案アンケート結果本部案アンケート結果
本部案アンケート結果
 
Kada reikia grazinti draudimo ismoka
Kada reikia grazinti draudimo ismokaKada reikia grazinti draudimo ismoka
Kada reikia grazinti draudimo ismoka
 
La porta di dor
La porta di dorLa porta di dor
La porta di dor
 
Финансовые и корпоративные расследования
Финансовые и корпоративные расследованияФинансовые и корпоративные расследования
Финансовые и корпоративные расследования
 

Ähnlich wie Async servlets

Websockets: Leichtgewichtige Verbindungen für Web-Applikationen
Websockets: Leichtgewichtige Verbindungen für Web-ApplikationenWebsockets: Leichtgewichtige Verbindungen für Web-Applikationen
Websockets: Leichtgewichtige Verbindungen für Web-ApplikationenSpeedPartner GmbH
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondUlrich Krause
 
IPv6 bei der Post - Step by Step zu IPv6
IPv6 bei der Post - Step by Step zu IPv6IPv6 bei der Post - Step by Step zu IPv6
IPv6 bei der Post - Step by Step zu IPv6Swiss IPv6 Council
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)kaftanenko
 
Lasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentationLasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentationSOASTA
 
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatengeKarin Patenge
 
aOS Aachen 2019 - Exchange Server 2019 - Wie macht man es richtig?
aOS Aachen 2019 - Exchange Server 2019 - Wie macht man es richtig?aOS Aachen 2019 - Exchange Server 2019 - Wie macht man es richtig?
aOS Aachen 2019 - Exchange Server 2019 - Wie macht man es richtig?Thomas Stensitzki
 

Ähnlich wie Async servlets (9)

Websockets: Leichtgewichtige Verbindungen für Web-Applikationen
Websockets: Leichtgewichtige Verbindungen für Web-ApplikationenWebsockets: Leichtgewichtige Verbindungen für Web-Applikationen
Websockets: Leichtgewichtige Verbindungen für Web-Applikationen
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
 
IPv6 bei der Post - Step by Step zu IPv6
IPv6 bei der Post - Step by Step zu IPv6IPv6 bei der Post - Step by Step zu IPv6
IPv6 bei der Post - Step by Step zu IPv6
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
 
Lasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentationLasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentation
 
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
 
aOS Aachen 2019 - Exchange Server 2019 - Wie macht man es richtig?
aOS Aachen 2019 - Exchange Server 2019 - Wie macht man es richtig?aOS Aachen 2019 - Exchange Server 2019 - Wie macht man es richtig?
aOS Aachen 2019 - Exchange Server 2019 - Wie macht man es richtig?
 

Async servlets