Links

  • 1. Sogeti
  • 2. JBoss
  • 3. IBM
  • 4. Oracle
  • 5. SpringSource
  • 6. NL-JUG
  • 7. Java

Archives

Syndication  RSS 2.0

RSS 1.0
RSS 2.0

Bookmark this site

Add 'JCN Blog' site to delicious  Add 'JCN Blog' site to technorati  Add 'JCN Blog' site to digg  Add 'JCN Blog' site to dzone

Posted by Tobias Groothuyse at 11:38 on Thursday 10 April    Add 'Scalable AJAX applications with Apache Comet' site to delicious  Add 'Scalable AJAX applications with Apache Comet' site to technorati  Add 'Scalable AJAX applications with Apache Comet' site to digg  Add 'Scalable AJAX applications with Apache Comet' site to dzone

Apachec Comet maakt het mogelijk om AJAX in push mode te kunnen gebruiken. Op dit moment is het AJAX model altijd pull based. Dit betekend dat de client altijd moet vragen aan de server of er relevante informatie beschikbaar is. Zeker wanneer de client events moet ontvangen die op de server onstaan zal de client constant moeten pollen bij de server of er al berichten zijn. Direct gevolg hiervan is dat, zeker met veel clients, de server wordt gehammered met request waarvan het overgrote deel overbodig zal zijn.

Apachec Comet biedt de mogelijkheid om informatie te pushen vanaf de server op het moment dat er een relevant event onstaat voor een bepaalde client. Er zijn twee verschillende mogelijkheden om dit te realiseren binnen de huidige HTTP specificatie. De eerste is “long poll”. In dit geval stuurt de client een request voor informatie “is er een event voor mij” en de server wacht net zo lang met een response tot dat event ook werkelijk aanwezig is. Een long poll is dus niet te onderscheiden van een erg langzame server. Voordeel van long poll is dat de er minder connecties moeten worden opgezet en afgebroken. Nadeel van long poll is dat er wel voor elke client een http connectie open blijft staan en een geblokkeerde thread.

Het alternatief voor long poll dat Comet biedt is streaming. In streaming mode dat de client een request waarop de server alleen de HTTP headers returneerd. Hierin staat dat de response multi-part is. Dit maakt het mogelijk voor Comet om de HTTP connectie open te houden. Elke keer dat er dan een relevant event voor de client onstaat wordt dit event als een stukje response naar de client gestuurd. Voordeel van streaming over long poll is dat er slechts 1 connectie nodig is per client.

Voor echte performance winst blijft dan nog het probleem van de TCP connecties die open moeten blijven en belangrijker, de Thread die de connectie afhandeld blijft veel langer in gebruik. Gezien het feit dat het aantal threads maar tot een bepaalde hoogte kan worden opgeschaald is dit een scalability probleem. De oplossing komt uit de hoek van NIO. Het NIO is het mogelijk om non blocking connecties te hebben. Dit houdt in dat alhoewel de TCP connectie open blijft staan, de Thread gereleased wordt op het moment dat de connectie normaliter zou blocken. Er werd ook vooruit gekeken naar de Servlet 3.0 spec. In deze spec zal ook volledig asynchrome communicatie worden opgenomen.


© 2020 Java Competence Network. All Rights Reserved.