Merhaba sevgili bergi okuyucuları. E-bergimizin 2. yılını doldurduğu bu ay sizlere en az bergimizin çıkarılışı kadar yeni olan bir teknolojiden, Comet’ten bahsedeceğim. Ajax gibi isminin nitelediği pek çok şeyden biri de temizlik markası olan Comet, ilk defa Alex Russell tarafından telaffuz edildi. Russell blogunda browser’larda düşük gecikmeli veri iletiminde kullanılan sunucu itişli akış (server-push streaming) tekniği için Comet sözcüğünü kullanarak bu tekniğe yeni bir ad koymuş oldu.

Comet ve bunun gibi veri yayımlama teknikleri anlık değişimleri sürekli çevrimiçi kullanıcılara yansıtmak durumunda olan borsa, açık arttırma, çevrimiçi şans oyunları, sohbet programları gibi alanlarda kullanılır. Sunucudan verilerin tanımlanmamış bir zaman süresince itilmesini tek başına Ajax sağlayamıyor. Comet yöntemi ile yine Ajax’ta olduğu gibi birden fazla yaklaşım bir araya getirilerek yepyeni bir bakış açısı ile gerçek zamanlı veri iletimini gerçekleştirmek amaçlanıyor.

Ajax tekniğiyle düzenli aralıklarla istemci tarafından sunucuya güncelleme isteği iletilir. Buna yoklama (polling) denir. Adından da anlaşıldığı gibi belirli zaman aralıklarıyla istemci sunucuyu yeni veriler için yoklar. İstemci taraflı yoklama basit Ajax çağrılarıyla başarılabilir. Aşağıdaki kodda çok basitçe örneklendirdim:

function sunucuyaUzunSureliSorguGonder() {
    asenkronSorguBaslat();
    sorguSonuclandiMi();   
}
function sorguSonuclandiMi() {
   var sorguSonucu = sorguBitiminiKontrolEdenAJAXCagrisi();

   if (sorguSonucu.bittiMi){
      sonuclariGoster(sorguSonucu);
   } else {
      setTimeout("sorguSonuclandiMi()",10000);
   }
}

Yukarıdaki ufak programda da görüldüğü gibi, sorgu sonucu iletilmedikçe geriye sunucudan sonuç içermese bile bir yanıt yollanır ve 10000 ms yani 10 saniyede bir çağrı yinelenir.

Bu yöntemin zayıf noktası tahmin edebileceğiniz gibi veri güncelleme olsa da olmasa da istemcinin sunucuyla belirli aralıklarla etkileşmesidir. Gönderilen her çağrı zamanında cevaplanmayabilir. Ayrıca belirtilen zaman aralığını oldukça aşan bir sürede verilerde değişiklik olmadığı halde gereksiz yere sunucuya çağrı gönderilmiş olabilir. Tüm bunlar veri iletiminde gecikmelere neden olur.

Comet olarak adlandırılmakta olan iki ayrı teknik vardır. Bunlardan biri uzun süreli yoklama (long polling) olarak adlandırılmakta. Bu yöntemin yukarıda bahsettiğim yoklama yönteminden farkı sunucuya yollanan isteklerdedir. Uzun süreli yoklamada istemci sunucuya sorguda bulunduğunda bir sonuç alınamaması durumunda sunucuda veri güncellemesi yapılana kadar istemciye geri yanıt dönülmez. Sunucuda sorgu zaman aşımı olana kadar bekletilir. Sorgu yinelemesi cevap gelir gelmez yapılır. Yukarıda verdiğim kod örneğini şu şekilde uyarlayabiliriz:

function sunucuyaUzunSureliSorguGonder() 
{   
asenkronSorguBaslat(); 
sorguSonuclandiMi();   
} 
function sorguSonuclandiMi() 
{    
var sorguSonucu = sorguBitiminiKontrolEdenAJAXCagrisi();    
if (sorguSonucu.bittiMi)
{       sonuclariGoster(sorguSonucu);    } 
else {       sorguSonuclandiMi();    } 
}

Burada görüldüğü gibi sorgunun sonuçlanmaması durumunda aynı çağrı tekrarlanır. Sorgu sunucuda bekletildiği ve geriye bir cevap dönülmediği için uzun süre etkin kalır. Uzun süreli yoklamadaki zaman aşımı çok uzun bir süre sonuç dönülmemesi durumunda gerçekleşir. Ayrıca uzun süreli yoklamada bile standart bir ağ sunucusunda her bir istek kendine ait bir kanaldan yürütülür. Bağlantının sürdürülebilmesi için var olan isteğe yeni bir kanal atanır. Buna süreklilendirme denir. Bunun yanında en fazla iki istek birden aynı anda işleme sokulabilir. Yani uzun yoklama isteği bitene kadar Ajax çağrısı yapılamaz. Tabi ki bu sunucu ayarlarına bağlı olan bir durumdur.

Uzun süreli yoklama sunucu itişini tam anlamıyla gerçekleştiremiyor olsa da istenilen hizmeti görmektedir.

Gelelim sunucu itişi tekniğine. Gerçek zamanlı veri değişimlerinin en iyi gözlemlenebileceği sunucu itişi istemci sunucuyla bağlantıya geçer geçmez bir istek yollar ve bu istek sunucudan veya browser’dan bağlantı kesilene dek açık bırakılır. Böylece tek bir istekle çoklu veri iletimi gerçekleştirilmiş olur. Yukarıda bahsettiğim yöntemlerdeki gibi zaman aşımı veya gecikme olmaz. Ayrıca belirli aralıklarla sunucuyu yoklamak yerine sunucudan istemciye veriler “itilir”.

Sağda ve solda gördüğünüz grafiklerde Comet tekniği ile yoklama tekniğinin yanıt gecikme süreleri ve veri iletim hızlarının karşılaştırmalı grafiklerini görüyorsunuz.

Comet gibi yüksek veri iletim hızı ve sürekli browser-sunucu bağlantısı gerektiren bir yöntemde sistem uyumluluğu çok önemlidir. Yeni ve gelişmekte olan bir teknik olduğundan uyumluluk sorunlarıyla karşılaşılabilir. Ancak hali hazırda bu teknikle ilgili geliştirilmiş ve kullanıma sunulmuş pek çok proje de var. Bunlara örnek olarak;

Kaynaklar: