SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
Jetty 9
The Next-Generation
Servlet Engine

Simone Bordet
sbordet@intalio.com
Simone Bordet
 Simone Bordet
 sbordet@intalio.com
 @simonebordet

 Open Source Contributor
 Jetty, CometD, MX4J, Foxtrot, LiveTribe, JBoss, Larex

 Lead Architect at Intalio/Webtide
 Jetty's SPDY and HTTP client maintainer

 CometD project leader
 Web messaging framework

 JVM tuning expert

Simone Bordet
sbordet@intalio.com
Agenda
 Jetty Introduction
 Web History and Evolution
 Web Protocols
 Jetty Features & Performance
 The future: HTTP 2.0

Simone Bordet
sbordet@intalio.com
Jetty
 The Jetty Servlet Container
 Implemented the Servlet Specification since 1.0

 Jetty 7 → Servlet 2.5
 Jetty 8, 9 → Servlet 3.0
 Jetty 9.1 → Servlet 3.1
 Mostly known for its component-based architecture
 Very easy to embed
 Very easy to use for automated tests

 Great for production too !
Simone Bordet
sbordet@intalio.com
History
&
Evolution

Simone Bordet
sbordet@intalio.com
w3c.org 1996
HTTP 1.0 protocol designed to serve these pages:

1 HTML File, 600 Bytes
Simone Bordet
sbordet@intalio.com
Evolution – I/O
 Technologies evolved over the years
 Scalability limited by blocking I/O
 Advent of NIO (asynchronous I/O)
 Servers became more scalable, C10K now possible
 Jetty 6 – one of the first NIO Servlet containers

 Jetty innovates: Jetty Continuations
 Portable way to suspend/resume requests

 Jetty spun off the CometD project at http://cometd.org
 Scalable Web Messaging Framework

 Servlet 3.0 incorporated Jetty Continuations concepts
 Servlet 3.1 expands to asynchronous I/O
Simone Bordet
sbordet@intalio.com
Evolution – CPU
 Multicore CPUs everywhere
 JDK enhanced with atomic primitives
 Rethink locking for “mechanical sympathy”
 Jetty 9 core rewrite taking that in account
 Keep thread context switching at minimum
 Reduce/Eliminate false sharing
 Use concurrent data structures
 Avoid synchronized in favor of atomic state machines

 Jetty 9.1 is 30+% faster than Jetty 8
 And implements more features
Simone Bordet
sbordet@intalio.com
w3c.org 2013

1 HTML, 33.5 KiB - 4 CSS, 12 KiB – 2 JS 31 KiB - 27 Images, 61.5 KiB
34 Resources, 138 KiB
Simone Bordet
sbordet@intalio.com
cnn.com 2013

172 Resources, 1.2 MiB
Simone Bordet
sbordet@intalio.com
Web Explosion
 The Web Exploded
 Assumptions, protocols and technologies valid in 1996

are still our best choice ?

WE CAN DO BETTER !

Simone Bordet
sbordet@intalio.com
HTTP Limits
 HTTP is an old protocol
 Not bidirectional
 No multiplexing
 No resource correlation

 Today's Web content forces too many hacks
 Comet techniques to fake bidirectionality
 Browsers to open multiple connections



Due to HTTP's lack of multiplexing
TCP slow start gets in the way

 Domain sharding imposes additional overhead on servers
 Would like to use pipelining, but cannot


Does not work reliably
Simone Bordet
sbordet@intalio.com
WebSocket

Simone Bordet
sbordet@intalio.com
WebSocket
 Effort Initiated by Browser Vendors to
 Bidirectional low latency communications
 Replace Comet HTTP “hacks”
 Implement rich web applications within the browser

 Standardized
 IETF – RFC 6455 wire protocol
 W3C – HTML 5 Javascript API
 JCP – JSR 356 Java API

 Jetty 7 was one of the first Servlet containers to
support WebSocket (2009)
 Jetty 9.1 supports JSR 356
Simone Bordet
sbordet@intalio.com
WebSocket Upgrade
 Runs on port 80 (or 443 for wss)
 Uses HTTP/1.1 Upgrade mechanism
REQUEST
GET / HTTP/1.1
Host: localhost:8080
Origin: http://localhost:8080
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: SbdIETLKHQ1TNBLeZFZS0g==
Sec-WebSocket-Version: 13
RESPONSE
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: y4yXRUolfnFfo3Jc5HFqRHNgx2A=
Simone Bordet
sbordet@intalio.com
HTTP Performance
 Jetty-7.6, CometD-2.4, chat application
 HTTP

Simone Bordet
sbordet@intalio.com
WebSocket Performance
 Jetty-7.6, CometD-2.4, chat application
 WebSocket

Simone Bordet
sbordet@intalio.com
WebSocket Deployment
 Browsers

 Java Servers

 Firefox 11 (Android 15)

 Jetty 7, Jetty 8, Jetty 9

 Internet Explorer 10 PP5

 Jetty 9.1 (JSR 356)

 Chrome 16 (Android 18)

 Glassfish

 Safari 6 (iOS 6)

 Resin 4

 Opera 12.1 (Mini N/A)

 Tomcat 7 (alpha)

 Blackberry 7.0

 Tomcat 8 (JSR 356)

 Jetty Client 7, 8, 9

73% browser coverage (mobile too)
(http://caniuse.com/websockets)

Simone Bordet
sbordet@intalio.com
SPDY

Simone Bordet
sbordet@intalio.com
SPDY is LIVE!
 SPDY is a live experiment to improve HTTP
 Addresses HTTP 1.1 limits
 Designed to be faster and better than HTTP

 Already widely deployed!
 Google, Twitter, Facebook, WordPress, Webtide, etc.
 Chrome & Firefox & IE 11

 The SPDY protocol replaces HTTP on the wire
 But it's transparent for applications

Simone Bordet
sbordet@intalio.com
SPDY & Jetty
 Jetty 7 & Jetty 8
 SPDY added by mocking HTTP wire protocol
 Multiplexing requires mock protocol per channel

 Jetty 9
 Re-architected to separate wire protocol from semantics
 HTTP semantics shared between HTTP, SPDY & FastCGI
 HTTP, SPDY, WebSocket, TLS 1st class citizens

 Use SPDY now!
 ZERO changes to your existing web applications
 Your use case can make Jetty, SPDY & HTTP 2.0 better
Simone Bordet
sbordet@intalio.com
SPDY Protocol Initiation
 SPDY uses TLS (aka SSL) connection on port 443
 TLS extended with Next Protocol Negotiation

 New framing protocol over TLS
 Intermediaries don't know it is not HTTP wrapped in TLS

 Transports existing HTTP Semantics
(GET, POST, HEAD etc)
 Client and Server application don't know it is not HTTP

Simone Bordet
sbordet@intalio.com
SPDY Multiplexing
 Multiplexing is built-in
SYN_STREAM

SYN_REPLY

SYN_STREAM

SYN_REPLY
SYN_REPLY

DATA

DATA

SYN_STREAM

SYN_REPLY

Simone Bordet
sbordet@intalio.com
SPDY Multiplexing
 Multiplexing
 Allows to make better use of TCP connections


Reduces TCP slow start

 Uses less resources on the server
 Responses may be sent out of order


Without waiting for slow responses

 Key point: reducing round trip waits
 Caused by limited connections and lack of multiplexing

Simone Bordet
sbordet@intalio.com
SPDY Push
 SPDY Push
 Server pushes secondary resources that are associated

to a primary resource
 Works in collaboration with browser's cache for a better

user experience
 Jetty is one of the first SPDY servers that provides
automated push functionalities
 Totally transparent for applications
 Based on the “Referrer” header


To associate primary and secondary resources

 Using “If-Modified-Since” header to avoid unnecessary

pushes
Simone Bordet
sbordet@intalio.com
SPDY Push
HTTP/1.1
index.html
application.js
style.css

image1.png

Push
Cache

SPDY/3 + PUSH

Simone Bordet
sbordet@intalio.com

index.html
appliction.js
style.css
Image1.png
SPDY Clients
 Desktop

 Mobile

 Firefox 13

 Android Browser 4.1

 Chrome 4

 Chrome for Android 18.0

 Opera 12.1

 Firefox Android 15.0

 Jetty Client 7, 8, 9

55% browser coverage (mobile too)
(http://caniuse.com/spdy)

Simone Bordet
sbordet@intalio.com
DEMO

Simone Bordet
sbordet@intalio.com
Jetty 9.1

Simone Bordet
sbordet@intalio.com
Jetty 9.1
 Polyglot (HTTP, WebSocket, SPDY, FastCGI)
 Servlet 3.1 ready
 Great as a production server too
 Not a monolithic server


Pick only the modules you need

 Tons of configuration possibilities
 Easy to customize

 “Jetty was one of the first servers to ...”
 Early adopters find the edge features they want in Jetty
 Late adopters benefit of the experience Jetty gathered
Simone Bordet
sbordet@intalio.com
Jetty 9.1 Performance
 Great performance
 Easy to push it to 70k or more requests/s


These are Servlet requests not just http ones

 Easy to get it to 250k connections

 Servlet 3.1 on par with Servlet 3.0
 But with less threads

 Intalio/Webtide commercial support

Simone Bordet
sbordet@intalio.com
Servlet 3.1
public void service(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
AsyncContext asyncContext =
request.startAsync(request, response);
asyncContext.setTimeout(0);
ReadListener reader = new AsyncReader(asyncContext);
ServletInputStream input = request.getInputStream();
input.setReadListener(reader);
}

Simone Bordet
sbordet@intalio.com
Servlet 3.1
public class AsyncReader implements ReadListener {
private final AsyncContext asyncContext;
...
public void onDataAvailable() throws IOException {
ServletInputStream input =
asyncContext.getRequest().getInputStream();
...
}
public void onAllDataRead() throws IOException {
...
}
}
Simone Bordet
sbordet@intalio.com
Servlet 3.1
public class AsyncWriter implements WriteListener {
private final AsyncContext asyncContext;
...
public void onWritePossible() throws IOException {
ServletOutputStream output =
asyncContext.getResponse().getOutputStream();
...
if (finishedWriting)
asyncContext.complete()
}
}

Simone Bordet
sbordet@intalio.com
Servlet 3.1
Echo Servlet Blocking I/O
public class SyncServlet extends HttpServlet
{
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
byte[] buffer = new byte[BUFFER_SIZE];
while (true)
{
int read = request.getInputStream().read(buffer, 0, BUFFER_SIZE);
if (read < 0)
break;
response.getOutputStream().write(buffer, 0, read);
}
}
}

Echo Servlet Async I/O
public static class AsyncServlet extends HttpServlet
{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
AsyncContext asyncContext = request.startAsync(request, response);
asyncContext.setTimeout(0);
Echoer echoer = new Echoer(asyncContext);
request.getInputStream().setReadListener(echoer);
response.getOutputStream().setWriteListener(echoer);
}
private class Echoer implements ReadListener, WriteListener
{
private final byte[] buffer = new byte[BUFFER_SIZE];
private final AsyncContext asyncContext;
private final ServletInputStream input;
private final ServletOutputStream output;
private boolean complete;
private Echoer(AsyncContext asyncContext) throws IOException
{
this.asyncContext = asyncContext;
this.input = asyncContext.getRequest().getInputStream();
this.output = asyncContext.getResponse().getOutputStream();
}
@Override
public void onDataAvailable() throws IOException
{
while (input.isReady())
{
int read = input.read(buffer);
output.write(buffer, 0, read);
if (!output.isReady())
return;
}
if (input.isFinished())
{
complete = true;
asyncContext.complete();
}
}
@Override
public void onAllDataRead() throws IOException
{
}
@Override
public void onWritePossible() throws IOException
{
if (input.isFinished())
{
if (!complete)
asyncContext.complete();
}
else
{
onDataAvailable();
}
}
@Override
public void onError(Throwable failure)
{
failure.printStackTrace();
}
}
}

Simone Bordet
sbordet@intalio.com
Jetty 9.1
 Jetty HttpClient
 High Performance HttpClient with fluent API


70% faster than Jetty 8's HttpClient

 Pluggable transports (HttpClient can speak SPDY)

 HTTP Proxy
 SPDY Proxy
 Jetty FastCGI
 Jetty can serve PHP / Python / Ruby / etc.

Simone Bordet
sbordet@intalio.com
HTTP 2.0
 HTTP 2.0 work has started
 IETF HTTPbis working group rechartered

 Two proposals received:
 Google - SPDY as the basis
 Microsoft – WebSocket framing with HTTP semantics

 SPDY Adopted as the starting point
 Unlikely to require TLS or NPN
 Will define precise interactions with proxies

 Early draft available
 http://tools.ietf.org/html/draft-ietf-httpbis-http2-06
Simone Bordet
sbordet@intalio.com
Conclusions

Simone Bordet
sbordet@intalio.com
Conclusions
 The Web is evolving
 Web Protocols are evolving
 Servers must keep the pace with new Web Protocols

 Try WebSocket today
 Production ready

 Try SPDY today
 Check your application is ready for the future
 Check the future is ready for your application

Simone Bordet
sbordet@intalio.com
Questions
&
Answers

Simone Bordet
sbordet@intalio.com

Contenu connexe

Tendances

HTML5 WebSocket Introduction
HTML5 WebSocket IntroductionHTML5 WebSocket Introduction
HTML5 WebSocket IntroductionMarcelo Jabali
 
HTML5 Real Time and WebSocket Code Lab (SFHTML5, GTUGSF)
HTML5 Real Time and WebSocket Code Lab (SFHTML5, GTUGSF)HTML5 Real Time and WebSocket Code Lab (SFHTML5, GTUGSF)
HTML5 Real Time and WebSocket Code Lab (SFHTML5, GTUGSF)Peter Lubbers
 
Building Next Generation Real-Time Web Applications using Websockets
Building Next Generation Real-Time Web Applications using WebsocketsBuilding Next Generation Real-Time Web Applications using Websockets
Building Next Generation Real-Time Web Applications using WebsocketsNaresh Chintalcheru
 
WebRTC + Socket.io: building a skype-like video chat with native javascript
WebRTC + Socket.io: building a skype-like video chat with native javascriptWebRTC + Socket.io: building a skype-like video chat with native javascript
WebRTC + Socket.io: building a skype-like video chat with native javascriptMichele Di Salvatore
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersViktor Gamov
 
Pushing the web — WebSockets
Pushing the web — WebSocketsPushing the web — WebSockets
Pushing the web — WebSocketsRoland M
 
HTML5 WebSocket for the Real-Time Web and the Internet of Things
HTML5 WebSocket for the Real-Time Weband the Internet of ThingsHTML5 WebSocket for the Real-Time Weband the Internet of Things
HTML5 WebSocket for the Real-Time Web and the Internet of ThingsPeter Moskovits
 
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) HackableCollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) HackableDarren Duke
 
Spring Boot & WebSocket
Spring Boot & WebSocketSpring Boot & WebSocket
Spring Boot & WebSocketMing-Ying Wu
 
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)Ericom Software
 
GWT Web Socket and data serialization
GWT Web Socket and data serializationGWT Web Socket and data serialization
GWT Web Socket and data serializationGWTcon
 
Large scale web socket system with AWS and Web socket
Large scale web socket system with AWS and Web socketLarge scale web socket system with AWS and Web socket
Large scale web socket system with AWS and Web socketLe Kien Truc
 
Building web apps with node.js, socket.io, knockout.js and zombie.js - Codemo...
Building web apps with node.js, socket.io, knockout.js and zombie.js - Codemo...Building web apps with node.js, socket.io, knockout.js and zombie.js - Codemo...
Building web apps with node.js, socket.io, knockout.js and zombie.js - Codemo...Ivan Loire
 
Spring + WebSocket integration
Spring + WebSocket integrationSpring + WebSocket integration
Spring + WebSocket integrationOleksandr Semenov
 
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...Peter Moskovits
 

Tendances (20)

HTML5 WebSocket Introduction
HTML5 WebSocket IntroductionHTML5 WebSocket Introduction
HTML5 WebSocket Introduction
 
HTML5 Real Time and WebSocket Code Lab (SFHTML5, GTUGSF)
HTML5 Real Time and WebSocket Code Lab (SFHTML5, GTUGSF)HTML5 Real Time and WebSocket Code Lab (SFHTML5, GTUGSF)
HTML5 Real Time and WebSocket Code Lab (SFHTML5, GTUGSF)
 
Building Next Generation Real-Time Web Applications using Websockets
Building Next Generation Real-Time Web Applications using WebsocketsBuilding Next Generation Real-Time Web Applications using Websockets
Building Next Generation Real-Time Web Applications using Websockets
 
WebRTC + Socket.io: building a skype-like video chat with native javascript
WebRTC + Socket.io: building a skype-like video chat with native javascriptWebRTC + Socket.io: building a skype-like video chat with native javascript
WebRTC + Socket.io: building a skype-like video chat with native javascript
 
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java DevelopersWebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
WebSockets: The Current State of the Most Valuable HTML5 API for Java Developers
 
Pushing the web — WebSockets
Pushing the web — WebSocketsPushing the web — WebSockets
Pushing the web — WebSockets
 
HTML5 WebSocket for the Real-Time Web and the Internet of Things
HTML5 WebSocket for the Real-Time Weband the Internet of ThingsHTML5 WebSocket for the Real-Time Weband the Internet of Things
HTML5 WebSocket for the Real-Time Web and the Internet of Things
 
J web socket
J web socketJ web socket
J web socket
 
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) HackableCollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
 
Spring Boot & WebSocket
Spring Boot & WebSocketSpring Boot & WebSocket
Spring Boot & WebSocket
 
Ws
WsWs
Ws
 
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
WebSockets Everywhere: the Future Transport Protocol for Everything (Almost)
 
GWT Web Socket and data serialization
GWT Web Socket and data serializationGWT Web Socket and data serialization
GWT Web Socket and data serialization
 
WebSocket protocol
WebSocket protocolWebSocket protocol
WebSocket protocol
 
Large scale web socket system with AWS and Web socket
Large scale web socket system with AWS and Web socketLarge scale web socket system with AWS and Web socket
Large scale web socket system with AWS and Web socket
 
HTML5 WebSockets
HTML5 WebSocketsHTML5 WebSockets
HTML5 WebSockets
 
Building web apps with node.js, socket.io, knockout.js and zombie.js - Codemo...
Building web apps with node.js, socket.io, knockout.js and zombie.js - Codemo...Building web apps with node.js, socket.io, knockout.js and zombie.js - Codemo...
Building web apps with node.js, socket.io, knockout.js and zombie.js - Codemo...
 
Spring + WebSocket integration
Spring + WebSocket integrationSpring + WebSocket integration
Spring + WebSocket integration
 
Realtime with-websockets-2015
Realtime with-websockets-2015Realtime with-websockets-2015
Realtime with-websockets-2015
 
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...
JMS, WebSocket, and the Internet of Things - Controlling Physical Devices on ...
 

En vedette

Classification of port and harbour ppt.pptx
Classification of port and harbour ppt.pptxClassification of port and harbour ppt.pptx
Classification of port and harbour ppt.pptxJAYA LAKSHMI ATHRAM
 
Jetty TLS Troubleshooting
Jetty TLS TroubleshootingJetty TLS Troubleshooting
Jetty TLS TroubleshootingRomanTeresch
 
DRUPAL Search API Solr
DRUPAL Search API SolrDRUPAL Search API Solr
DRUPAL Search API SolrAndrew Siz
 
Privacy and visibility in the sensor society
Privacy and visibility in the sensor societyPrivacy and visibility in the sensor society
Privacy and visibility in the sensor societyConsiderati
 
Putting Hypermedia Back in REST with JAX-RS
Putting Hypermedia Back in REST with JAX-RSPutting Hypermedia Back in REST with JAX-RS
Putting Hypermedia Back in REST with JAX-RSPT.JUG
 
Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5lovingprince58
 
BOOK_SPIRAL JETTY ACOMA MADRID BANDELIER KLAUS HU 2013/14
BOOK_SPIRAL JETTY ACOMA MADRID BANDELIER KLAUS HU 2013/14BOOK_SPIRAL JETTY ACOMA MADRID BANDELIER KLAUS HU 2013/14
BOOK_SPIRAL JETTY ACOMA MADRID BANDELIER KLAUS HU 2013/14KLAUS HU
 
Hadoop Interacting with HDFS
Hadoop Interacting with HDFSHadoop Interacting with HDFS
Hadoop Interacting with HDFSApache Apex
 
Indexing Text and HTML Files with Solr
Indexing Text and HTML Files with SolrIndexing Text and HTML Files with Solr
Indexing Text and HTML Files with SolrLucidworks (Archived)
 
Spillways2000 101110063804-phpapp02 - copy
Spillways2000 101110063804-phpapp02 - copySpillways2000 101110063804-phpapp02 - copy
Spillways2000 101110063804-phpapp02 - copybakht zamin
 
Breakwater, jetties and groins.
Breakwater, jetties and groins.Breakwater, jetties and groins.
Breakwater, jetties and groins.Latif Hyder Wadho
 
Docks and their classification
Docks and their classificationDocks and their classification
Docks and their classificationLatif Hyder Wadho
 
Horbour & Dock Engineerin
Horbour & Dock EngineerinHorbour & Dock Engineerin
Horbour & Dock Engineerinjamalkhan619
 

En vedette (20)

Jetty Introduction
Jetty IntroductionJetty Introduction
Jetty Introduction
 
Classification of port and harbour ppt.pptx
Classification of port and harbour ppt.pptxClassification of port and harbour ppt.pptx
Classification of port and harbour ppt.pptx
 
Breakwaters
BreakwatersBreakwaters
Breakwaters
 
Jetty TLS Troubleshooting
Jetty TLS TroubleshootingJetty TLS Troubleshooting
Jetty TLS Troubleshooting
 
DRUPAL Search API Solr
DRUPAL Search API SolrDRUPAL Search API Solr
DRUPAL Search API Solr
 
Spring Boot Showcase
Spring Boot ShowcaseSpring Boot Showcase
Spring Boot Showcase
 
Privacy and visibility in the sensor society
Privacy and visibility in the sensor societyPrivacy and visibility in the sensor society
Privacy and visibility in the sensor society
 
Putting Hypermedia Back in REST with JAX-RS
Putting Hypermedia Back in REST with JAX-RSPutting Hypermedia Back in REST with JAX-RS
Putting Hypermedia Back in REST with JAX-RS
 
Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5Jetty服务器架构及调优.v2 2011-5
Jetty服务器架构及调优.v2 2011-5
 
BOOK_SPIRAL JETTY ACOMA MADRID BANDELIER KLAUS HU 2013/14
BOOK_SPIRAL JETTY ACOMA MADRID BANDELIER KLAUS HU 2013/14BOOK_SPIRAL JETTY ACOMA MADRID BANDELIER KLAUS HU 2013/14
BOOK_SPIRAL JETTY ACOMA MADRID BANDELIER KLAUS HU 2013/14
 
Berthing structures
Berthing structuresBerthing structures
Berthing structures
 
Hadoop Interacting with HDFS
Hadoop Interacting with HDFSHadoop Interacting with HDFS
Hadoop Interacting with HDFS
 
Indexing Text and HTML Files with Solr
Indexing Text and HTML Files with SolrIndexing Text and HTML Files with Solr
Indexing Text and HTML Files with Solr
 
Spillways2000 101110063804-phpapp02 - copy
Spillways2000 101110063804-phpapp02 - copySpillways2000 101110063804-phpapp02 - copy
Spillways2000 101110063804-phpapp02 - copy
 
Breakwater, jetties and groins.
Breakwater, jetties and groins.Breakwater, jetties and groins.
Breakwater, jetties and groins.
 
Spillways
SpillwaysSpillways
Spillways
 
Breakwaters
BreakwatersBreakwaters
Breakwaters
 
Docks and their classification
Docks and their classificationDocks and their classification
Docks and their classification
 
Spillway
Spillway Spillway
Spillway
 
Horbour & Dock Engineerin
Horbour & Dock EngineerinHorbour & Dock Engineerin
Horbour & Dock Engineerin
 

Similaire à Jetty 9 – The Next Generation Servlet Container

HTTP, WebSocket, SPDY: evoluzione dei protocolli web by Simone Bordet
HTTP, WebSocket, SPDY: evoluzione dei protocolli web by Simone BordetHTTP, WebSocket, SPDY: evoluzione dei protocolli web by Simone Bordet
HTTP, WebSocket, SPDY: evoluzione dei protocolli web by Simone BordetCodemotion
 
Realizzare applicazioni Web con WebSocket, by Simone Bordet
Realizzare applicazioni Web con WebSocket, by Simone BordetRealizzare applicazioni Web con WebSocket, by Simone Bordet
Realizzare applicazioni Web con WebSocket, by Simone BordetCodemotion
 
WebSockets On Fire
WebSockets On FireWebSockets On Fire
WebSockets On FireJef Claes
 
Cloud-Ready Web Messaging With CometD by S. Bordet
Cloud-Ready Web Messaging  With CometD by S. BordetCloud-Ready Web Messaging  With CometD by S. Bordet
Cloud-Ready Web Messaging With CometD by S. BordetCorley S.r.l.
 
Cloud-Ready Web Messaging with CometD
Cloud-Ready Web Messaging with CometDCloud-Ready Web Messaging with CometD
Cloud-Ready Web Messaging with CometDSimone Bordet
 
Introduction to Reactive Streams: Current & Future - Simone Bordet - Codemoti...
Introduction to Reactive Streams: Current & Future - Simone Bordet - Codemoti...Introduction to Reactive Streams: Current & Future - Simone Bordet - Codemoti...
Introduction to Reactive Streams: Current & Future - Simone Bordet - Codemoti...Codemotion
 
Improving performance by changing the rules from fast to SPDY
Improving performance by changing the rules   from fast to SPDYImproving performance by changing the rules   from fast to SPDY
Improving performance by changing the rules from fast to SPDYCotendo
 
From Fast To SPDY
From Fast To SPDYFrom Fast To SPDY
From Fast To SPDYMike Belshe
 
Programming WebSockets with Glassfish and Grizzly
Programming WebSockets with Glassfish and GrizzlyProgramming WebSockets with Glassfish and Grizzly
Programming WebSockets with Glassfish and GrizzlyC2B2 Consulting
 
Dev con kolkata 2012 websockets
Dev con kolkata 2012   websocketsDev con kolkata 2012   websockets
Dev con kolkata 2012 websocketsSANKARSAN BOSE
 
Comet / WebSocket Web Applications
Comet / WebSocket Web ApplicationsComet / WebSocket Web Applications
Comet / WebSocket Web ApplicationsCodemotion
 
Westhawk integration
Westhawk integrationWesthawk integration
Westhawk integrationTim Panton
 
Real-Time with Flowdock
Real-Time with FlowdockReal-Time with Flowdock
Real-Time with FlowdockFlowdock
 
Computer network (10)
Computer network (10)Computer network (10)
Computer network (10)NYversity
 
V2 peter-lubbers-sf-jug-websocket
V2 peter-lubbers-sf-jug-websocketV2 peter-lubbers-sf-jug-websocket
V2 peter-lubbers-sf-jug-websocketbrent bucci
 
HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 era
HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 eraHTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 era
HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 erapeychevi
 
Camelone-2012 HTML5 WebSocket ActiveMQ/Camel
Camelone-2012 HTML5 WebSocket ActiveMQ/CamelCamelone-2012 HTML5 WebSocket ActiveMQ/Camel
Camelone-2012 HTML5 WebSocket ActiveMQ/CamelCharles Moulliard
 

Similaire à Jetty 9 – The Next Generation Servlet Container (20)

HTTP, WebSocket, SPDY: evoluzione dei protocolli web by Simone Bordet
HTTP, WebSocket, SPDY: evoluzione dei protocolli web by Simone BordetHTTP, WebSocket, SPDY: evoluzione dei protocolli web by Simone Bordet
HTTP, WebSocket, SPDY: evoluzione dei protocolli web by Simone Bordet
 
Realizzare applicazioni Web con WebSocket, by Simone Bordet
Realizzare applicazioni Web con WebSocket, by Simone BordetRealizzare applicazioni Web con WebSocket, by Simone Bordet
Realizzare applicazioni Web con WebSocket, by Simone Bordet
 
WebSockets On Fire
WebSockets On FireWebSockets On Fire
WebSockets On Fire
 
Cloud-Ready Web Messaging With CometD by S. Bordet
Cloud-Ready Web Messaging  With CometD by S. BordetCloud-Ready Web Messaging  With CometD by S. Bordet
Cloud-Ready Web Messaging With CometD by S. Bordet
 
Cloud-Ready Web Messaging with CometD
Cloud-Ready Web Messaging with CometDCloud-Ready Web Messaging with CometD
Cloud-Ready Web Messaging with CometD
 
Cometdの紹介
Cometdの紹介Cometdの紹介
Cometdの紹介
 
Introduction to Reactive Streams: Current & Future - Simone Bordet - Codemoti...
Introduction to Reactive Streams: Current & Future - Simone Bordet - Codemoti...Introduction to Reactive Streams: Current & Future - Simone Bordet - Codemoti...
Introduction to Reactive Streams: Current & Future - Simone Bordet - Codemoti...
 
Improving performance by changing the rules from fast to SPDY
Improving performance by changing the rules   from fast to SPDYImproving performance by changing the rules   from fast to SPDY
Improving performance by changing the rules from fast to SPDY
 
From Fast To SPDY
From Fast To SPDYFrom Fast To SPDY
From Fast To SPDY
 
Programming WebSockets with Glassfish and Grizzly
Programming WebSockets with Glassfish and GrizzlyProgramming WebSockets with Glassfish and Grizzly
Programming WebSockets with Glassfish and Grizzly
 
Dev con kolkata 2012 websockets
Dev con kolkata 2012   websocketsDev con kolkata 2012   websockets
Dev con kolkata 2012 websockets
 
SPDY - or maybe HTTP2.0
SPDY - or maybe HTTP2.0SPDY - or maybe HTTP2.0
SPDY - or maybe HTTP2.0
 
Comet / WebSocket Web Applications
Comet / WebSocket Web ApplicationsComet / WebSocket Web Applications
Comet / WebSocket Web Applications
 
Westhawk integration
Westhawk integrationWesthawk integration
Westhawk integration
 
Real-Time with Flowdock
Real-Time with FlowdockReal-Time with Flowdock
Real-Time with Flowdock
 
Computer network (10)
Computer network (10)Computer network (10)
Computer network (10)
 
The HTML5 WebSocket API
The HTML5 WebSocket APIThe HTML5 WebSocket API
The HTML5 WebSocket API
 
V2 peter-lubbers-sf-jug-websocket
V2 peter-lubbers-sf-jug-websocketV2 peter-lubbers-sf-jug-websocket
V2 peter-lubbers-sf-jug-websocket
 
HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 era
HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 eraHTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 era
HTTP/2 and QUICK protocols. Optimizing the Web stack for HTTP/2 era
 
Camelone-2012 HTML5 WebSocket ActiveMQ/Camel
Camelone-2012 HTML5 WebSocket ActiveMQ/CamelCamelone-2012 HTML5 WebSocket ActiveMQ/Camel
Camelone-2012 HTML5 WebSocket ActiveMQ/Camel
 

Plus de Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 

Plus de Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Dernier

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 

Dernier (20)

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 

Jetty 9 – The Next Generation Servlet Container

  • 1. Jetty 9 The Next-Generation Servlet Engine Simone Bordet sbordet@intalio.com
  • 2. Simone Bordet  Simone Bordet  sbordet@intalio.com  @simonebordet  Open Source Contributor  Jetty, CometD, MX4J, Foxtrot, LiveTribe, JBoss, Larex  Lead Architect at Intalio/Webtide  Jetty's SPDY and HTTP client maintainer  CometD project leader  Web messaging framework  JVM tuning expert Simone Bordet sbordet@intalio.com
  • 3. Agenda  Jetty Introduction  Web History and Evolution  Web Protocols  Jetty Features & Performance  The future: HTTP 2.0 Simone Bordet sbordet@intalio.com
  • 4. Jetty  The Jetty Servlet Container  Implemented the Servlet Specification since 1.0  Jetty 7 → Servlet 2.5  Jetty 8, 9 → Servlet 3.0  Jetty 9.1 → Servlet 3.1  Mostly known for its component-based architecture  Very easy to embed  Very easy to use for automated tests  Great for production too ! Simone Bordet sbordet@intalio.com
  • 6. w3c.org 1996 HTTP 1.0 protocol designed to serve these pages: 1 HTML File, 600 Bytes Simone Bordet sbordet@intalio.com
  • 7. Evolution – I/O  Technologies evolved over the years  Scalability limited by blocking I/O  Advent of NIO (asynchronous I/O)  Servers became more scalable, C10K now possible  Jetty 6 – one of the first NIO Servlet containers  Jetty innovates: Jetty Continuations  Portable way to suspend/resume requests  Jetty spun off the CometD project at http://cometd.org  Scalable Web Messaging Framework  Servlet 3.0 incorporated Jetty Continuations concepts  Servlet 3.1 expands to asynchronous I/O Simone Bordet sbordet@intalio.com
  • 8. Evolution – CPU  Multicore CPUs everywhere  JDK enhanced with atomic primitives  Rethink locking for “mechanical sympathy”  Jetty 9 core rewrite taking that in account  Keep thread context switching at minimum  Reduce/Eliminate false sharing  Use concurrent data structures  Avoid synchronized in favor of atomic state machines  Jetty 9.1 is 30+% faster than Jetty 8  And implements more features Simone Bordet sbordet@intalio.com
  • 9. w3c.org 2013 1 HTML, 33.5 KiB - 4 CSS, 12 KiB – 2 JS 31 KiB - 27 Images, 61.5 KiB 34 Resources, 138 KiB Simone Bordet sbordet@intalio.com
  • 10. cnn.com 2013 172 Resources, 1.2 MiB Simone Bordet sbordet@intalio.com
  • 11. Web Explosion  The Web Exploded  Assumptions, protocols and technologies valid in 1996 are still our best choice ? WE CAN DO BETTER ! Simone Bordet sbordet@intalio.com
  • 12. HTTP Limits  HTTP is an old protocol  Not bidirectional  No multiplexing  No resource correlation  Today's Web content forces too many hacks  Comet techniques to fake bidirectionality  Browsers to open multiple connections   Due to HTTP's lack of multiplexing TCP slow start gets in the way  Domain sharding imposes additional overhead on servers  Would like to use pipelining, but cannot  Does not work reliably Simone Bordet sbordet@intalio.com
  • 14. WebSocket  Effort Initiated by Browser Vendors to  Bidirectional low latency communications  Replace Comet HTTP “hacks”  Implement rich web applications within the browser  Standardized  IETF – RFC 6455 wire protocol  W3C – HTML 5 Javascript API  JCP – JSR 356 Java API  Jetty 7 was one of the first Servlet containers to support WebSocket (2009)  Jetty 9.1 supports JSR 356 Simone Bordet sbordet@intalio.com
  • 15. WebSocket Upgrade  Runs on port 80 (or 443 for wss)  Uses HTTP/1.1 Upgrade mechanism REQUEST GET / HTTP/1.1 Host: localhost:8080 Origin: http://localhost:8080 Connection: Upgrade Upgrade: websocket Sec-WebSocket-Key: SbdIETLKHQ1TNBLeZFZS0g== Sec-WebSocket-Version: 13 RESPONSE HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: websocket Sec-WebSocket-Accept: y4yXRUolfnFfo3Jc5HFqRHNgx2A= Simone Bordet sbordet@intalio.com
  • 16. HTTP Performance  Jetty-7.6, CometD-2.4, chat application  HTTP Simone Bordet sbordet@intalio.com
  • 17. WebSocket Performance  Jetty-7.6, CometD-2.4, chat application  WebSocket Simone Bordet sbordet@intalio.com
  • 18. WebSocket Deployment  Browsers  Java Servers  Firefox 11 (Android 15)  Jetty 7, Jetty 8, Jetty 9  Internet Explorer 10 PP5  Jetty 9.1 (JSR 356)  Chrome 16 (Android 18)  Glassfish  Safari 6 (iOS 6)  Resin 4  Opera 12.1 (Mini N/A)  Tomcat 7 (alpha)  Blackberry 7.0  Tomcat 8 (JSR 356)  Jetty Client 7, 8, 9 73% browser coverage (mobile too) (http://caniuse.com/websockets) Simone Bordet sbordet@intalio.com
  • 20. SPDY is LIVE!  SPDY is a live experiment to improve HTTP  Addresses HTTP 1.1 limits  Designed to be faster and better than HTTP  Already widely deployed!  Google, Twitter, Facebook, WordPress, Webtide, etc.  Chrome & Firefox & IE 11  The SPDY protocol replaces HTTP on the wire  But it's transparent for applications Simone Bordet sbordet@intalio.com
  • 21. SPDY & Jetty  Jetty 7 & Jetty 8  SPDY added by mocking HTTP wire protocol  Multiplexing requires mock protocol per channel  Jetty 9  Re-architected to separate wire protocol from semantics  HTTP semantics shared between HTTP, SPDY & FastCGI  HTTP, SPDY, WebSocket, TLS 1st class citizens  Use SPDY now!  ZERO changes to your existing web applications  Your use case can make Jetty, SPDY & HTTP 2.0 better Simone Bordet sbordet@intalio.com
  • 22. SPDY Protocol Initiation  SPDY uses TLS (aka SSL) connection on port 443  TLS extended with Next Protocol Negotiation  New framing protocol over TLS  Intermediaries don't know it is not HTTP wrapped in TLS  Transports existing HTTP Semantics (GET, POST, HEAD etc)  Client and Server application don't know it is not HTTP Simone Bordet sbordet@intalio.com
  • 23. SPDY Multiplexing  Multiplexing is built-in SYN_STREAM SYN_REPLY SYN_STREAM SYN_REPLY SYN_REPLY DATA DATA SYN_STREAM SYN_REPLY Simone Bordet sbordet@intalio.com
  • 24. SPDY Multiplexing  Multiplexing  Allows to make better use of TCP connections  Reduces TCP slow start  Uses less resources on the server  Responses may be sent out of order  Without waiting for slow responses  Key point: reducing round trip waits  Caused by limited connections and lack of multiplexing Simone Bordet sbordet@intalio.com
  • 25. SPDY Push  SPDY Push  Server pushes secondary resources that are associated to a primary resource  Works in collaboration with browser's cache for a better user experience  Jetty is one of the first SPDY servers that provides automated push functionalities  Totally transparent for applications  Based on the “Referrer” header  To associate primary and secondary resources  Using “If-Modified-Since” header to avoid unnecessary pushes Simone Bordet sbordet@intalio.com
  • 26. SPDY Push HTTP/1.1 index.html application.js style.css image1.png Push Cache SPDY/3 + PUSH Simone Bordet sbordet@intalio.com index.html appliction.js style.css Image1.png
  • 27. SPDY Clients  Desktop  Mobile  Firefox 13  Android Browser 4.1  Chrome 4  Chrome for Android 18.0  Opera 12.1  Firefox Android 15.0  Jetty Client 7, 8, 9 55% browser coverage (mobile too) (http://caniuse.com/spdy) Simone Bordet sbordet@intalio.com
  • 30. Jetty 9.1  Polyglot (HTTP, WebSocket, SPDY, FastCGI)  Servlet 3.1 ready  Great as a production server too  Not a monolithic server  Pick only the modules you need  Tons of configuration possibilities  Easy to customize  “Jetty was one of the first servers to ...”  Early adopters find the edge features they want in Jetty  Late adopters benefit of the experience Jetty gathered Simone Bordet sbordet@intalio.com
  • 31. Jetty 9.1 Performance  Great performance  Easy to push it to 70k or more requests/s  These are Servlet requests not just http ones  Easy to get it to 250k connections  Servlet 3.1 on par with Servlet 3.0  But with less threads  Intalio/Webtide commercial support Simone Bordet sbordet@intalio.com
  • 32. Servlet 3.1 public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { AsyncContext asyncContext = request.startAsync(request, response); asyncContext.setTimeout(0); ReadListener reader = new AsyncReader(asyncContext); ServletInputStream input = request.getInputStream(); input.setReadListener(reader); } Simone Bordet sbordet@intalio.com
  • 33. Servlet 3.1 public class AsyncReader implements ReadListener { private final AsyncContext asyncContext; ... public void onDataAvailable() throws IOException { ServletInputStream input = asyncContext.getRequest().getInputStream(); ... } public void onAllDataRead() throws IOException { ... } } Simone Bordet sbordet@intalio.com
  • 34. Servlet 3.1 public class AsyncWriter implements WriteListener { private final AsyncContext asyncContext; ... public void onWritePossible() throws IOException { ServletOutputStream output = asyncContext.getResponse().getOutputStream(); ... if (finishedWriting) asyncContext.complete() } } Simone Bordet sbordet@intalio.com
  • 35. Servlet 3.1 Echo Servlet Blocking I/O public class SyncServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { byte[] buffer = new byte[BUFFER_SIZE]; while (true) { int read = request.getInputStream().read(buffer, 0, BUFFER_SIZE); if (read < 0) break; response.getOutputStream().write(buffer, 0, read); } } } Echo Servlet Async I/O public static class AsyncServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { AsyncContext asyncContext = request.startAsync(request, response); asyncContext.setTimeout(0); Echoer echoer = new Echoer(asyncContext); request.getInputStream().setReadListener(echoer); response.getOutputStream().setWriteListener(echoer); } private class Echoer implements ReadListener, WriteListener { private final byte[] buffer = new byte[BUFFER_SIZE]; private final AsyncContext asyncContext; private final ServletInputStream input; private final ServletOutputStream output; private boolean complete; private Echoer(AsyncContext asyncContext) throws IOException { this.asyncContext = asyncContext; this.input = asyncContext.getRequest().getInputStream(); this.output = asyncContext.getResponse().getOutputStream(); } @Override public void onDataAvailable() throws IOException { while (input.isReady()) { int read = input.read(buffer); output.write(buffer, 0, read); if (!output.isReady()) return; } if (input.isFinished()) { complete = true; asyncContext.complete(); } } @Override public void onAllDataRead() throws IOException { } @Override public void onWritePossible() throws IOException { if (input.isFinished()) { if (!complete) asyncContext.complete(); } else { onDataAvailable(); } } @Override public void onError(Throwable failure) { failure.printStackTrace(); } } } Simone Bordet sbordet@intalio.com
  • 36. Jetty 9.1  Jetty HttpClient  High Performance HttpClient with fluent API  70% faster than Jetty 8's HttpClient  Pluggable transports (HttpClient can speak SPDY)  HTTP Proxy  SPDY Proxy  Jetty FastCGI  Jetty can serve PHP / Python / Ruby / etc. Simone Bordet sbordet@intalio.com
  • 37. HTTP 2.0  HTTP 2.0 work has started  IETF HTTPbis working group rechartered  Two proposals received:  Google - SPDY as the basis  Microsoft – WebSocket framing with HTTP semantics  SPDY Adopted as the starting point  Unlikely to require TLS or NPN  Will define precise interactions with proxies  Early draft available  http://tools.ietf.org/html/draft-ietf-httpbis-http2-06 Simone Bordet sbordet@intalio.com
  • 39. Conclusions  The Web is evolving  Web Protocols are evolving  Servers must keep the pace with new Web Protocols  Try WebSocket today  Production ready  Try SPDY today  Check your application is ready for the future  Check the future is ready for your application Simone Bordet sbordet@intalio.com