COMET (programlama)

**Comet**, internet 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 yüklenir. Ziyaretçinin her isteğinde, web tarayıcıları sunucuya 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 tarayıcısındaki sayfayı yenilediğinde ya da yeni bir sayfaya geçtiğinde görüntülenebilmesidir.

Bu problemin çözümünde, web sayfalarının yalnızca belirli bir bölümündeki değişiklikler için Ajax kullanılarak elde edilen veriler kullanılmaktaydı. Böylece toplamda transfer edilen veri miktarı ve istek-cevap döngüsünün süresi azalma yaşanırken; aynı anda isteklerin sayısıyla eşzamanlı istek sayısına bağlı olarak, sonuçları üreten web uygulamalarının toplam karşılama miktarlarında da artış meydana gelmiştir. Ayrıca, asenkron arka plan veri transferleri kullanıldığında, ziyaretçiler, tüm verinin yalnızca bir kısmını kullanabilse de, web uygulamalarının yanıt verme hızı daha da artmaktadır.

Bu tür bir uygulamada temel sorunların yanı sıra; sunucunun veri gönderebilmesi için, öncelikle ziyaretçinin bir istekte bulunması gerekmektedir. Bu durum, 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, bir ziyaretçi sunucuya veri gönderdiğinde, bu veriler işlense dahi, işlem sonucunda ortaya çıkan çıktıyı yalnızca veriyi gönderen ziyaretçi görebilir. Diğer kullanıcılar ise bu süreç ve sonuçlarından -kendileri talep etmedikçe- haberdar olamazlar.

Bu soruna çözüm olarak, sunucudaki değişiklikleri periyodik olarak kontrol eden bir mekanizma geliştirilebilir. Ancak bu yaklaşım optimal bir çözüm sunmaz. Sürekli sunucu sorgulaması yapan bir sistem, hem beklenen olayın gerçekleşme sürecinde zaman kaybına yol açar hem de uygulamanın yanıt verme performansını olumsuz etkiler. Ayrıca bu yöntem, gereksiz bant genişliği tüketimine de neden olur.

## Kaynakça

## Dış bağlantılar
* The Aquarium COMET ve Glassfish hakkında yazılar 
* How to implement COMET with PHP 
* Ajax for IBM WebSphere Platform Early program Comet feature for IBM WebSphere-based Products
* 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).
* Asteroid (a small Comet) : Comet in Squeak(Smalltalk), by Diego Gomez Deck
* 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.
* COMETd : an open source scalable comet framework. A Dojo foundation sponsored project.
* 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.
* HTTP-SELECT An IETF Internet Draft from 1999, which describes the HTTP asynchronous updates pattern
* ICE Technology Corp.'s - real-time push data to your RIA.
* LazyHttp, the backbone to Web 3.0
* 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.
* PHP & jQuery ile Comet Programlama