Comet from JavaOne 2008

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    3 Favorites & 1 Event

    Comet from JavaOne 2008 - Presentation Transcript

    1. Comet ☄ The Rise of Highly Interactive Web Sites
    2. Introduction Perspectives on Comet blabberone.sitepen.com Architectures Technical
    3. Long lived HTTP A pattern not a protocol Distinct from polling Reverse Ajax == Comet + Polling
    4. Pushing data to the browser without needing the browser to ask
    5. Why? Ajax made individual pages interactive places to explore More and more of the data on the web is social and therefore changing
    6. Why? Time people spend on a page Time before a page changes Evolution of the Web
    7. Time Server Ajax Interaction Time Server Comet Updates State
    8. Perspectives
    9. Comet is for ... • keeping me up to date ... with ... • everyone else, and • everything else
    10. Everyone else What are the other guys are doing? • Editing things that interest you • Talking to/about you • Saying and doing interesting things • Playing games
    11. Everything else What is System X doing? • Data streaming • Async processing • Transaction fulfillment
    12. Chat is everywhere: GMail, Meebo, Facebook ... Collaborative Editing: GDocs, Thinkature Streaming Financial Data: Lightstreamer, Caplin Asynch Updates: GMail,Yes.com Online Gaming: GPokr, Chess.com Async Server Processing: Polar Rose
    13. Before comet, services were one way. Now services can talk back
    14. Async made easy • fire and forget • growl/toast for the web
    15. Programming model changes: • Waiter vs. Buffet • The server is an event bus • State changes are events!
    16. Changing the user experience
    17. Architectures
    18. Inboard vs Outboard
    19. App Server
    20. App Server
    21. App Server
    22. App Server
    23. App Server
    24. App Server
    25. Inboard (e.g. DWR) • Simpler for new development • Harder scaling • Comet is just part of the infrastructure
    26. CometD App Server
    27. CometD App Server
    28. CometD App Server
    29. CometD App Server
    30. CometD App Server
    31. CometD App Server
    32. CometD App Server
    33. Outboard (e.g. Cometd): • Add-on that doesn’t affect the server • Easier to add to existing apps • Harder to get started
    34. Demo
    35. On the Client On the Server share.html <p>Share price: <span id='price'> </span> </p>
    36. On the Client On the Server share.html <p>Share price: import org.directwebremoting.ui.dwr.Util; <span id='price'> </span> Util.setValue(\"price\", 42); </p>
    37. On the Client On the Server share.html <p>Share price: import org....scriptaculous.Effect <span id='price'> </span> Effect.shake(\"price\"); </p>
    38. On the Client On the Server share.html <p>Share price: import jsx3.gui.* <span id='price'> </span> Server s = GI.getServer(\"app\"); </p> Button b = s.getJSXById(\"id\", Button.class); b.setEnabled(Form.STATEDISABLED, true);
    39. On the Client On the Server share.html <p>Share price: import org.dojotoolkit.dijit.Dijit; <span id='price'> import org.dojotoolkit.dijit.Editor; </span> </p> Editor e = Dijit.byId(\"price\", Editor.class); e.setValue(42);
    40. On the Client On the Server share.html ScriptSessionFilter f = ...; <p>Share price: Runnable r = new Runnable() { <span id='price'> public void run() { </span> ... </p> } }; Browser.withAllSessionsFiltered(f, r);
    41. On the Client On the Server share.html String s = \"dwr.util.setValue('price', 42)\"; <p>Share price: ScriptBuffer b = new ScriptBuffer(s); <span id='price'> </span> for (ScriptSession session : sessions) { </p> session.addScript(b); }
    42. On the Client On the Server share.html <p>Share price: <span id='price'> </span> </p>
    43. Diagrams
    44. Bayeux Performance
    45. Client Server Client Server Client Server Time Time Time Polling Long Poll Forever Frame Load Profiles
    46. client one client one client two client two comet ajax ajax ajax request handler request handler app logic app logic database database server server Time Time
    47. But ... It’s a hack ... for now
    48. Client Issues Maximum of 2 connections per browser per host (IE7/6) • Coordination using window.name in the client • or cookies using a server • or use multi-home DNS HTTP streaming is download only (chunked mode) TCP connections are kept alive under HTTP 1.1 Server detection of failed connections
    49. Not A Hack Much Longer New browsers will make it better: • IE 8, FF3 raise number of connections • HTML 5 event sources • Opera already implements • HTML 5 DOM Storage provides way to synchronize across tabs and frames
    50. Client How-to: Forever Frame Client posts an iframe which doesn’t close quickly • Send text/plain and poll in browser (not IE) • Send text/plain with 4k whitespace to flush IE • Flush with a <script> tag for each data block The iframe will need killing and restarting to avoid memory leak But IE clicks when iframe starts
    51. Client How-to: Long Polling Client makes an XHR request which does not return immediately IE disallows reading XHR.responseText until connection is closed Although you can keep XHR frames open forever, generally you poll
    52. Client How-to: htmlfile ‘htmlfile’ is an ActiveX control like XHR: htmlfile = new ActiveXObject(\"htmlfile\"); htmlfile.open(); htmlfile.write(\"<html><iframe src='javascript:void(0)' onload='cleanup();'></iframe></html>\"); htmlfile.close(); htmlfile.parentWindow.dwr = dwr; Avoids ‘clicking’, but doesn’t work in IE/Server 2003 Not supported in Firefox, Safari, Opera, etc.
    53. Client How-to: Callback Polling Create <script> blocks pointing to any domain Create new script block when last completes
    54. Client How-to: Other Options Mime Messaging: • Uses Multipart Mime in HTML: x-multipart-replace • Not in IE • Excellent performance Server-Sent Events: WHATWG, but Opera only Flash: We probably have enough other options that we don’t need to get into plugins
    55. Server Tricks Watch out for stream-stoppers • Apache: mod_jk • Buggy network proxies • Various application firewalls Watch out for thread starvation
    56. Does that stop us? Ajax is also a hack, but that hasn’t stopped it And Comet does work
    57. Comet vs. Polling For Polling: • More efficient for very low latencies • Simpler to implement For Comet: • More efficient for all but very low latencies • More adaptable

    + Joe WalkerJoe Walker, 2 years ago

    custom

    4838 views, 3 favs, 4 embeds more stats

    Comet talk by Alex Russell and Joe Walker from Java more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 4838
      • 4463 on SlideShare
      • 375 from embeds
    • Comments 0
    • Favorites 3
    • Downloads 89
    Most viewed embeds
    • 372 views on http://cometdaily.com
    • 1 views on http://blog.slideboom.com
    • 1 views on http://www.hanrss.com
    • 1 views on http://64.233.169.104

    more

    All embeds
    • 372 views on http://cometdaily.com
    • 1 views on http://blog.slideboom.com
    • 1 views on http://www.hanrss.com
    • 1 views on http://64.233.169.104

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events