2010-06-04 17 views
8

Facebook sohbet gibi bir sohbet oluşturmalıyım.Comet VS Ajax yoklaması

Kuyruklu Yıldız Bağlantıyı korumak için daha fazla belleğe ihtiyacım var.

Ajax yoklaması ile her 3-4 saniyede bir istek gönderirseniz bir gecikme sorunu vardır.

Öyleyse ... Gecikme (3-4 saniye) fark etmezse, Ajax Polling benim durumum için daha mı iyi?

+1

Sanırım orada kendi sorunuzu cevapladınız :) –

cevap

1

Gecikme bir sorun değilse, AJAX muhtemelen daha iyidir. Comet çok, çok dikkatli değilseniz, aynı istemci/sunucu çifti arasında çoklu bağlantıları koruyarak sorunlarla karşılaşabilirsiniz. (Ref)

6

Gecikme, tek sorun değildir. COMET (uzun yoklama) trafiğinizi "kaydeder" - sorgulamayı kullandığınızda, sunucuda değişiklik olup olmadığını bilemezsiniz, bu nedenle bazı aramalar sadece trafik ve kaynak israfı olabilir (örn. sohbet, her 3-4 saniyede bir arama yapıyorsunuz). COMET durumunda, genellikle sunucudan bir güncelleme almak için sadece bir çağrıya ihtiyacınız vardır (% 100 isabet oranı ile).

+2

ama Comet ile bağlantıları açmak için daha fazla belleğe ihtiyacım var ... hayır? – xRobot

+1

Bir bağlantıyı tutmak çok zararlı değildir. Bellek tüketimi daha fazla hangi sunucu tarafı IO API'sini seçeceğinize bağlıdır - engelleme veya engelleme. Engelleme API'sini seçerseniz, bağlantı başına bir iş parçacığınız olacak -> 3-4k açık bağlantılarla bellek sorunları. Engellenmeyen API'yi seçerseniz (neredeyse her uygulama sunucusunda NIO özelliği bulunur), milyonlarca açılmış bağlantıyı tutabilirsiniz. –

+1

Bu ilginç - http://iobound.com/2008/11/comet-nio/ –

2

@Vasil:

bir göz to this problem

Ve IO üzerinde Nio the false superiority ilgili "Take Açtığınız bağlantı milyonlarca tutabilir".

iobound makalesi, NIO'dan daha iyi performans gösteriyor ve NIO'dan önce evet IO bellekte kalıyor (bu arada, yazar, yığın belleğini daha düşük bir değerle azaltmaya çalışmadı).