COMET (programlama)

Comet, İnternet sayfalarında kullanıcı tarayıcısından herhangi bir istek olmamasına karşın, web sunucusundan kullanıcıya veri göndermeyi sağlayan bir programlama tekniğidir.Geleneksel olarak web sayfaları sadece, ziyaretçi herhangi bir istekte bulunduğunda ekrana taşınır. Ziyaretçinin her isteğinde, web tarayıcıları bir sunucu istikametinde bir HTTP bağlantısını başlatır ve istekte bulunulan verinin elde edilmesini müteakip bağlantıyı keser. Bu yöntemin dezavantajı ise içeriği güncellenmiş veya değiştirilmiş bir sayfanın, ancak ziyaretçi gerçek anlamda tarayıcısındaki sayfayı yenilediğinde ya da yeni bir sayfaya eriştiğinde görüntülenebilmesidir.Bu problemin çözümünde, web sayfalarının belli bir parçasındaki değişiklikler için Ajax kullanılarak elde edilen veriler kullanılmaktaydı. Tabii ki bununla beraber toplamda transfer edilen veri miktarı ve istek-sonuç işlemi sürelerinde azalma yaşanırken; aynı anda isteklerin sayısıyla eş zamanlı olarak, sonuçları üreten web uygulamalarının toplam karşılama miktarlarında da artış meydana gelmiştir. Dahası, asenkronize arka plan veri transferleri kullanıldığında, ziyaretçiler toplamda elde edilen verinin ancak bir kısmını kullanabildiği gibi, web uygulamalarının karşılama/cevap verme sıklığı daha da artmaktadır.Bu tür bir uygulamada problemin getirdiği sıkıntılardan hariç olarak; sunucunun veri gönderebilmesi için, öncelikle ziyaretçinin bir istekte bulunması gerekmektedir. Bu problem, ziyaretçiye veri aktarılmadan önce sunucu tarafında meydana gelen bir olayın beklenmesi ile çalışan uygulamaların önündeki en büyük engeli teşkil etmektedir. Örneğin  ziyaretçi sunucuya birtakım veriler gönderir, bu veriler sunucuda işlenir fakat işlem sonucunda veriyi gönderen ziyaretçinin dışındakilerin bu süreç ve sonucunda elde edilen çıktıdan haberleri olamaz -diğer ziyaretçilerin talebi olmaksızın-.Çözüm olarak sunucudaki bir hareketin/sonucun varlığını aralıklarla yoklayacak bir uygulama tasarlanabilirdi fakat bu pek de düzenli bir çözüm olmayacaktır. Çünkü sürekli sunucuyu yoklayan bir uygulama, söz konusu asıl hareketin/sonucun tamamlanmasında zamanın israf edilmesini ve bunun sonucunda direkt olarak işlemi gerçekleştiren uygulamanın karşılama/cevap verme yükünü etkileyecektir. Ek olarak tabii ki bant genişliğinde de fazladan bir artış söz konusudur.Apache Tomcat 6.0 - Advanced IO and Tomcat : Comet support allows a servlet to process IO asynchronously, receiving events when data is available for reading on the connection (rather than always using a blocking read), and writing data back on connections asynchronously (most likely responding to some event raised from some other source).Caplin Liberator A proven, scalable, bi-directional highly tuned messaging server that uses comet with HTTP/S tunnelling to provide up to 30,000 concurrent connections with low-latency streaming - used by major financial institutions across the globe.Flex Enterprise Services An approach from Adobe/Macromedia for addressing the same problem using Flash.GlassFish Comet Support: Simple example on how to write an AJAX/Comet based application using the Grizzly's Asynchronous Request Processing framework.Lightstreamer  A full Comet solution that comprises a high-performance Push Server and a set of client libraries. The event-based architecture of the Server makes it able to scale to tens of thousands of concurrent connections.Virgil's Live™ streams any data from any source to any web client and delivers real time data at low latency, high availability, through firewalls and proxy servers based on COMET.