logging in or signing up ApacheConUS2007 ZeroLatencyHTTP Michelangelo Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINTLite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 83 Category: Entertainment License: All Rights Reserved Like it (0) Dislike it (0) Added: January 16, 2008 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... Premium member Presentation Transcript Zero Latency HTTPthe comet technique: Zero Latency HTTP the comet technique And Comet is….: And Comet is…. Comet is the Serial Port of Web 2.0Who am I – bla bla: Who am I – bla bla fhanik@apache.org Tomcat Committer / ASF member Co-designed the Comet implementation Implemented NIO connector in 6 Responsible for session replication and clustering Been involved with ASF since 2001What we will cover: What we will cover Brief History of HTTP How HTTP is used today Introduction to AJAX Beyond AJAX, The Comet Technique Comet Implementation – Under the hood Uni- vs. Bidirectional Comet Problems and their solutions Demo Q & AThe History of HTTP: The History of HTTP 1.0 (7th release) RFC 1945 in 1996 Co-authored by ASF’s Roy T Fielding Current RFC 2616 Lead by W3C Activity on specs are closed Standard has been achieved http://www.w3.org/Protocols/History.htmlWhat is HTTP: What is HTTP HyperText Transfer Protocol Text based protocol Request/Response semantics Stateless Most commonly run over TCP/IP networks Protocol used for much more than just hypermedia information sharing What is HTTP: What is HTTP Text based protocol – CRLN delimited GET /Protocols/History.html HTTP/1.1 Host: www.w3.org User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-aliveWhat is HTTP: What is HTTP Request/Response Semantics GET /Protocols/History.html HTTP/1.1 Host: www.w3.org Keep-Alive: 300 Connection: keep-alive HTTP/1.x 200 OK Date: Mon, 19 Mar 2007 15:46:17 GMT Server: Apache/1.3.37 (Unix) PHP/4.4.5 Keep-Alive: timeout=2, max=100 Content-Length: 19575 Connection: Keep-Alive Request ResponseWhat is HTTP: What is HTTP Stateless TCP session can end after each request State based on cookies TCP/IP transport No limitations for transporting with other protocols Delivers both text and binary dataHTTP Limitations: HTTP Limitations Request/Response Change one field on a page requires a reload of the entire page Client always has to initiate the request Stateless Server required to keep state State is timed out, if client is not cancelling it Finer grained communication is needed AJAX Rich Clients (FLEX, OpenLaszlo, …)AJAX: AJAX Asynchronous JavaScript +(and) XML Uses HTTP Asynchronous data processing Able to request data from server and update a page in the browser Common examples maps.google.comBenefits of AJAX: Benefits of AJAX Performance More can be accomplished in less amount of transactions Less user interaction Program can make intelligent decision about when a request needs to happen and what data it needs to fetch Sample Application for view of benefits http://www.ajaxinfo.com/ucst/index.htmlBeyond AJAX: Beyond AJAX What did AJAX not accomplish? Still client poll based Server push can be accomplished by a client poll followed by a delayed response Traditional web/servlet containers are thread-per-request based Server resource tied up for the duration of the requestIntroducing Comet: Introducing Comet The answer to our problems Q: What problems? A: The fact that port HTTP/80 has been replacing every decent TCP protocol over the years. Q: What do you mean? A: I’ll explain…it all boils down to port 80Slide15: Picture borrowed from: dojotoolkit.orgHow it Works: 3. Register with background thread How it Works Timeline Server Client 1. HTTP request 2. BEGIN Event 5. HTTP Response - 200 OK – Tx Enc: Chunked 4. Event Complete Webapp Async Thread 6. Server data push 7. Encode and transfer 8. Another server push 9. Client Push 10. READ Event 11. One more client push Webapp Worker Thread 12. And on it goes…Under the hood: Under the hood Open HTTP request, leave it open ended Instant or delayed response(s), leave it open ended Tomcat processes just like servlet CometProcessor extends HttpServlet(or should) CometFilter extends Filter Connection remains open and is writableUnder the Hood: Under the Hood Open ended request POST /load/echo HTTP/1.1 User-Agent: Filips Comet Client/1.0 Host: 127.0.0.1:8080 Transfer-Encoding: chunked <CRLN> 10 test data test 1 Open ended allows for new data without the overhead for a new request Zero Latency HTTPUnder the Hood: Under the Hood Open ended response HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Transfer-Encoding: chunked Content-Type: text/plain;charset=UTF-8 Transfer-Encoding: chunked Date: Mon, 19 Mar 2007 22:25:36 GMT <CRLN> 12 test data test 1 Open ended allows for new data without the overhead for a new request Zero Latency HTTPUnder the Hood: Under the Hood CometProcessor Extends HttpServlet to provide a fall back option should the connector not support Comet void event(CometEvent event)… Types of Events: BEGIN READ END ERROR A request is a Comet request if the URL maps to a servlet that implements the CometProcessor interfaceUnder the Hood: Under the Hood CometFilter Extends javax.servlet.Filter to provide fall back option should the Connector not support Comet void doFilterEvent(CometEvent event, CometFilterChain chain) … Same mapping rules as CometProcessorUnder the Hood: Under the Hood BEGIN New connection created Request headers fully parsed and mapped to a servlet Partial body may or may not have been read Processed by a worker thread May proceed directly to a READ eventUnder the Hood: Under the Hood READ New data available on the connection Processed by worker thread Read now to avoid repeated “read” events Read using servlet input stream event.getHttpServletRequest.getInputStream() Under the Hood: Under the Hood END The request has naturally come to an end Server may shutdown, and needs to close connections Only if Connector shutdown prior to app, piggy back on HttpServlet.destroy for most apps instead ERROR When the connection times out or an error has occurred during invokationUnder the Hood: Under the Hood Events are “connection” centric Thrown based on IO events Reading should only be done when an event is thrown Writing can be done async Synchronize your write methodsGotcha’s: Gotcha’s NIO – client disconnect is signaled by a READ with a -1 or EOFException by InputStream.read() The event lifecycle is not always what it appears to be While the API seems simple, it is pretty fragile Easy to break if misusedBidirectional Comet: Bidirectional Comet Tomcat supports bidirectional comet communication Server can push data to the client Client can push data to the server Timeout values can be set on a per-connection basis Unidirectional Comet means that only the server can push data to clientScalability?: Scalability? No more thread per connection or thread per request One asynch thread can handle writes for thousands of Comet connections No overhead of request/response headers for each request No overhead for TCP setup/breakdown Memory overhead for open connectionsExamples of use: Examples of use Rich Clients Mail Maps Online conferences Clients with need for server push Stock tickers Auction sites Chat Future Improvements: Future Improvements Non blocking reads Non blocking writes Bayeux protocol implementation End Request – AJAX over Comet Keepalive Connections Comet through HTTP proxy(?) Feedback: Feedback Tomcat Dev List fhanik@apache.org Help and ideas are wanted You do not have the permission to view this presentation. In order to view it, please contact the author of the presentation.
ApacheConUS2007 ZeroLatencyHTTP Michelangelo Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINTLite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 83 Category: Entertainment License: All Rights Reserved Like it (0) Dislike it (0) Added: January 16, 2008 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... Premium member Presentation Transcript Zero Latency HTTPthe comet technique: Zero Latency HTTP the comet technique And Comet is….: And Comet is…. Comet is the Serial Port of Web 2.0Who am I – bla bla: Who am I – bla bla fhanik@apache.org Tomcat Committer / ASF member Co-designed the Comet implementation Implemented NIO connector in 6 Responsible for session replication and clustering Been involved with ASF since 2001What we will cover: What we will cover Brief History of HTTP How HTTP is used today Introduction to AJAX Beyond AJAX, The Comet Technique Comet Implementation – Under the hood Uni- vs. Bidirectional Comet Problems and their solutions Demo Q & AThe History of HTTP: The History of HTTP 1.0 (7th release) RFC 1945 in 1996 Co-authored by ASF’s Roy T Fielding Current RFC 2616 Lead by W3C Activity on specs are closed Standard has been achieved http://www.w3.org/Protocols/History.htmlWhat is HTTP: What is HTTP HyperText Transfer Protocol Text based protocol Request/Response semantics Stateless Most commonly run over TCP/IP networks Protocol used for much more than just hypermedia information sharing What is HTTP: What is HTTP Text based protocol – CRLN delimited GET /Protocols/History.html HTTP/1.1 Host: www.w3.org User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-aliveWhat is HTTP: What is HTTP Request/Response Semantics GET /Protocols/History.html HTTP/1.1 Host: www.w3.org Keep-Alive: 300 Connection: keep-alive HTTP/1.x 200 OK Date: Mon, 19 Mar 2007 15:46:17 GMT Server: Apache/1.3.37 (Unix) PHP/4.4.5 Keep-Alive: timeout=2, max=100 Content-Length: 19575 Connection: Keep-Alive Request ResponseWhat is HTTP: What is HTTP Stateless TCP session can end after each request State based on cookies TCP/IP transport No limitations for transporting with other protocols Delivers both text and binary dataHTTP Limitations: HTTP Limitations Request/Response Change one field on a page requires a reload of the entire page Client always has to initiate the request Stateless Server required to keep state State is timed out, if client is not cancelling it Finer grained communication is needed AJAX Rich Clients (FLEX, OpenLaszlo, …)AJAX: AJAX Asynchronous JavaScript +(and) XML Uses HTTP Asynchronous data processing Able to request data from server and update a page in the browser Common examples maps.google.comBenefits of AJAX: Benefits of AJAX Performance More can be accomplished in less amount of transactions Less user interaction Program can make intelligent decision about when a request needs to happen and what data it needs to fetch Sample Application for view of benefits http://www.ajaxinfo.com/ucst/index.htmlBeyond AJAX: Beyond AJAX What did AJAX not accomplish? Still client poll based Server push can be accomplished by a client poll followed by a delayed response Traditional web/servlet containers are thread-per-request based Server resource tied up for the duration of the requestIntroducing Comet: Introducing Comet The answer to our problems Q: What problems? A: The fact that port HTTP/80 has been replacing every decent TCP protocol over the years. Q: What do you mean? A: I’ll explain…it all boils down to port 80Slide15: Picture borrowed from: dojotoolkit.orgHow it Works: 3. Register with background thread How it Works Timeline Server Client 1. HTTP request 2. BEGIN Event 5. HTTP Response - 200 OK – Tx Enc: Chunked 4. Event Complete Webapp Async Thread 6. Server data push 7. Encode and transfer 8. Another server push 9. Client Push 10. READ Event 11. One more client push Webapp Worker Thread 12. And on it goes…Under the hood: Under the hood Open HTTP request, leave it open ended Instant or delayed response(s), leave it open ended Tomcat processes just like servlet CometProcessor extends HttpServlet(or should) CometFilter extends Filter Connection remains open and is writableUnder the Hood: Under the Hood Open ended request POST /load/echo HTTP/1.1 User-Agent: Filips Comet Client/1.0 Host: 127.0.0.1:8080 Transfer-Encoding: chunked <CRLN> 10 test data test 1 Open ended allows for new data without the overhead for a new request Zero Latency HTTPUnder the Hood: Under the Hood Open ended response HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Transfer-Encoding: chunked Content-Type: text/plain;charset=UTF-8 Transfer-Encoding: chunked Date: Mon, 19 Mar 2007 22:25:36 GMT <CRLN> 12 test data test 1 Open ended allows for new data without the overhead for a new request Zero Latency HTTPUnder the Hood: Under the Hood CometProcessor Extends HttpServlet to provide a fall back option should the connector not support Comet void event(CometEvent event)… Types of Events: BEGIN READ END ERROR A request is a Comet request if the URL maps to a servlet that implements the CometProcessor interfaceUnder the Hood: Under the Hood CometFilter Extends javax.servlet.Filter to provide fall back option should the Connector not support Comet void doFilterEvent(CometEvent event, CometFilterChain chain) … Same mapping rules as CometProcessorUnder the Hood: Under the Hood BEGIN New connection created Request headers fully parsed and mapped to a servlet Partial body may or may not have been read Processed by a worker thread May proceed directly to a READ eventUnder the Hood: Under the Hood READ New data available on the connection Processed by worker thread Read now to avoid repeated “read” events Read using servlet input stream event.getHttpServletRequest.getInputStream() Under the Hood: Under the Hood END The request has naturally come to an end Server may shutdown, and needs to close connections Only if Connector shutdown prior to app, piggy back on HttpServlet.destroy for most apps instead ERROR When the connection times out or an error has occurred during invokationUnder the Hood: Under the Hood Events are “connection” centric Thrown based on IO events Reading should only be done when an event is thrown Writing can be done async Synchronize your write methodsGotcha’s: Gotcha’s NIO – client disconnect is signaled by a READ with a -1 or EOFException by InputStream.read() The event lifecycle is not always what it appears to be While the API seems simple, it is pretty fragile Easy to break if misusedBidirectional Comet: Bidirectional Comet Tomcat supports bidirectional comet communication Server can push data to the client Client can push data to the server Timeout values can be set on a per-connection basis Unidirectional Comet means that only the server can push data to clientScalability?: Scalability? No more thread per connection or thread per request One asynch thread can handle writes for thousands of Comet connections No overhead of request/response headers for each request No overhead for TCP setup/breakdown Memory overhead for open connectionsExamples of use: Examples of use Rich Clients Mail Maps Online conferences Clients with need for server push Stock tickers Auction sites Chat Future Improvements: Future Improvements Non blocking reads Non blocking writes Bayeux protocol implementation End Request – AJAX over Comet Keepalive Connections Comet through HTTP proxy(?) Feedback: Feedback Tomcat Dev List fhanik@apache.org Help and ideas are wanted