async servlets

16
Async Servlets & NIO Connectors

Upload: niklas-walter

Post on 01-Jul-2015

773 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Async servlets

Async Servlets &

NIO Connectors

Page 2: Async servlets

Agenda

• Servlets

• Connectors

• Async Servlets

• Ausblick

07.08.2013 2

Page 3: Async servlets

Servlets

07.08.2013 3

Page 4: Async servlets

Aufbau

07.08.2013 4

Page 5: Async servlets

Threading Model

07.08.2013 5

Thread

Thread

ThreadThread

Thread

Threadpool

Web

Listener

Request

Socketcreate

Response

Connector

Servlet

Servlet

ServletServlet.do…(Request, Respone)

Thread

Page 6: Async servlets

ConnectorsBIO/NIO/APR

07.08.2013 6

Page 7: Async servlets

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“

Page 8: Async servlets

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

Page 9: Async servlets

Asynchronous Servlets

07.08.2013 9

Page 10: Async servlets

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

Page 11: Async servlets

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>

Page 12: Async servlets

Verwendung@Override

protected void doPost(final HttpServletRequest request, final HttpServletResponseresponse) throws ServletException, IOException {

final AsyncContext context = request.startAsync();

context.start(new Runnable() {

@Override

public void run() {

doSomething(context);

context.complete();

}

}

}

07.08.2013 12

Page 13: Async servlets

Ausblick

07.08.2013 13

Page 14: Async servlets

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

Page 15: Async servlets

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)

Page 16: Async servlets

Fragen?

07.08.2013 16