‹ Sorduğum Sorular › ‹ Takip Ettiğim Sorular › ‹ Verdiğim Cevaplar › ‹ Arşivimdeki Sorular › ‹ İlgilendiğim Alanlardaki Sorular ›
Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Soruyu takip et
karakter kaldı
yukonit
5 cevap – 10 soru
Profili | Mesaj At | Takip Et
Tweet
Kategoriler
PHP JavaScript SQL Web Sunucuları API ve Protokoller Facebook
İstatistikler
10 yıl önce yazılmış
42 üye izlemiş
1 cevap verilmiş
2 kişi arşivine eklemiş
Comet
Comet hakkında bilgi verebilecek olan var mı?Facebook'un yorumlarda bunu kullandığını düşünüyorum.Fazla Türkçe makale bulamadım.
İlginiz için şimdiden teşekküler...
+1
-0
Doğru Cevap
2
10 yıl önce yazılmış
madpoet
84 cevap - 1 soru
Comet'i AJAX'ın bir uygulama türü olarak düşünebiliriz. Nerede kullanılır dersek en bariz örnek chat uygulaması olabilir.
Bir chat uygulaması yazdığını düşün, bir kişi diğerine mesaj yazınca mesajı diğer kişinin alması için sonuçta bir http request yapılması gerekecek. Bunun için ilk akla gelen çözüm atıyorum 2 saniyede bir ajax sorgusu göndermek. Şimdi bunda iki sorun var: Birincisi mesajlar yine anlık gitmeyecek. Karşılıklı hararetli bir konuşma yaptığını düşünürsek A kişisi mesaj yazdığında B'nin yazdığı cevabı alması 4sn.'ye kadar uzayabilir (Hattaki yavaşlığı hesaba katmadım bile).
İkinci sorun da her gönderilen request'in bir maliyeti var. Hem her seferinde tonla HTTP Header göndermek gerekiyor (cookie'ler, referer tanımları, karakter seti vs. bir sürü data) hem de TCP başlantısı açıp kapatmanın server üzerinde bir maliyeti var.
Comet'te ise temel mantık açık bir connection bırakmak üzerine kurulu. Böylece client data'yı çekmiyor da (pull), server client'a datayı gönderiyor (push). Yöntemlernden biri şöyle; bir Ajax çağrısı yapıyorsun ama herhangi bir data gelip gitmiyor henüz, server data göndermiyor beklemede kalıyor. Data gönderildiği anda da server açık olan connection'dan datayı gönderiyor.
Tabii burada bazı trickler var: Birincisi bir connection açtığın zaman onu sonsuza kadar açık tutmaya çalışmak yanlış olur zira client kopsa server'ın haberi olmayacağı için bir timeout olması lazım. Ayrıca client'ın da bir timeout'u olacaktır mutlaka, ki server'daki timeout bizim kontrolümüzde ama client'ın timeout'una müdahale edemiyoruz. Connection'ı belirli aralıklarla kapatıp açmak lazım. Mesaj gönderen ajax, mesaj bekleyen fonksiyondan da farklı olmalı...
Başka bir kilit nokta da, açık bırakılan connection'ın maliyeti. Eğer bunu apache ile yapmaya kalkarsan açık tuttuğu connection başına apache tüm modüllerini hafızaya alacak: rewrite modülünden tut php'ye kadar. Bu da deli gibi RAM işgal eder.
Php'yi sunan daha hafif bir server kullanılabilir. Hatta belki de bu işi php'siz halletmek gerekebilir. APE (http://www.ape-project.org/) incelenebilir, NginX'in http push module'ü kullanılabilir, stream hub (http://www.stream-hub.com/) incelenebilir...