Comet (programlama) - Comet (programming)

Kuyruklu yıldız bir web uygulaması uzun süre tutulan model HTTPS istek sağlar Web sunucusu -e it verileri bir tarayıcı, tarayıcı açıkça istemeden.[1][2] Kuyruklu yıldız bir şemsiye terimi, bu etkileşimi sağlamak için birden fazla tekniği kapsayan. Tüm bu yöntemler, tarayıcılarda varsayılan olarak bulunan özelliklere dayanır, örneğin JavaScript varsayılan olmayan eklentiler yerine. Comet yaklaşımı, web'in orijinal modeli, bir tarayıcının bir seferde eksiksiz bir web sayfası istediği.[3]

Comet tekniklerinin kullanımı web Geliştirme kelimenin kullanımından önce gelir Kuyruklu yıldız olarak neolojizm kolektif teknikler için. Comet, dahil olmak üzere birkaç başka isimle bilinir.Ajax Push,[4][5]Ters Ajax,[6] İki yönlü web,[7] HTTP Akışı,[7] veHTTP sunucusu push[8]diğerleri arasında.[9] Dönem Kuyruklu yıldız bir kısaltma değildir, ancak 2006 yılında Alex Russell tarafından icat edilmiştir. Blog İleti Comet: Tarayıcı için Düşük Gecikme Verileri.[10]

Son yıllarda, standartlaştırma ve yaygın destek WebSocket ve Sunucu tarafından gönderilen etkinlikler Comet modelini geçersiz kıldı.

Tarih

Erken Java uygulamaları

Yerleştirme yeteneği Java uygulamaları tarayıcılara (ile başlayarak Netscape Navigator 2.0 Mart 1996'da[11]) bir ham kullanarak iki yönlü sürekli iletişimi mümkün kıldı TCP priz[12] tarayıcı ve sunucu arasında iletişim kurmak için. Bu soket, tarayıcı, uygulamayı barındıran belgede olduğu sürece açık kalabilir. Olay bildirimleri herhangi bir formatta (metin veya ikili) gönderilebilir ve uygulama tarafından kodu çözülebilir.

İlk tarayıcıdan tarayıcıya iletişim çerçevesi

Tarayıcıdan tarayıcıya iletişimi kullanan ilk uygulama Tango Interactive'di.[13][başarısız doğrulama ] 1996–98'de Kuzeydoğu Paralel Mimariler Merkezi'nde uygulandı (NPAC ) Syracuse üniversitesi kullanma DARPA finansman. TANGO mimarisi Syracuse Üniversitesi tarafından patentlenmiştir.[14] TANGO çerçevesi kapsamlı bir şekilde uzaktan eğitim aracı olarak kullanılmıştır.[15] Çerçeve ticarileştirildi CollabWorx ve Amerika Birleşik Devletleri Savunma Bakanlığı'ndaki bir düzine kadar Komuta Kontrol ve Eğitim uygulamasında kullanıldı[kaynak belirtilmeli ].

İlk Comet uygulamaları

Comet uygulamalarının ilk seti 2000 yılına dayanmaktadır.[16][güvenilmez kaynak? ] ile Pushlets, Lightstreamer ve KnowNow projeleri. Pushlets Just van den Broecke tarafından oluşturulan bir çerçeve,[17] açık kaynak uygulamaları. Pushlet'ler, sunucu tarafı Java sunucu uygulamalarına ve istemci tarafı JavaScript kitaplığına dayanıyordu. Bang Networks - a Silikon Vadisi tarafından desteklenen başlangıç Netscape kurucu ortak Marc Andreessen - tüm web için gerçek zamanlı bir itme standardı oluşturmak için çok fazla finanse edilmiş bir girişimde bulundu.[18]

Nisan 2001'de Chip Morningstar, tasarladığı özel HTTP sunucusu ile tasarladığı bir istemci arasındaki iki iletişim kanalını açık tutmak için iki HTTP soketi kullanan Java tabanlı (J2SE) bir web sunucusu geliştirmeye başladı. Douglas Crockford; Haziran 2001 itibariyle işleyen bir demo sistemi mevcuttur.[kaynak belirtilmeli ] Sunucu ve istemci, State Software, Inc.'in kurucularının, JSON Crockford'un önerisini takiben. Sistemin tamamı, istemci kitaplıkları, JSON ve sunucu olarak bilinen mesajlaşma formatı, bir kısmı Sun Microsystems, Amazon.com, EDS ve Volkswagen tarafından satılan ve kullanılan Durum Uygulama Çerçevesi haline geldi.[kaynak belirtilmeli ]

Mart 2006'da, yazılım Mühendisi Alex Russell, Comet terimini kişisel blogundaki bir yazıda ortaya attı.[19] Yeni dönem bir oyundu Ajax (Ajax ve Kuyruklu yıldız her ikisi de ABD'de yaygın ev temizleyicileridir).[20][21][22]

2006'da bazı uygulamalar bu teknikleri daha geniş bir kitleye sundu: Meebo ’In çok protokollü web tabanlı sohbet uygulaması, kullanıcıların AOL, Yahoo, ve Microsoft tarayıcı üzerinden sohbet platformları; Google, web tabanlı sohbeti şuraya ekledi: Gmail; JotSpot, Google tarafından satın alındığından beri bir başlangıç, Comet tabanlı gerçek zamanlı işbirliğine dayalı belge düzenlemeyi geliştirdi.[23] Java tabanlı gibi yeni Comet varyantları oluşturuldu ICEfaces JSF çerçeve ("terimini tercih etseler de"Ajax Push"[5]). Daha önce Java-applet tabanlı aktarımları kullanan diğerleri bunun yerine salt JavaScript uygulamalarına geçtiler.[24]

Uygulamalar

Comet uygulamaları, sayfa sayfa web modeli ve geleneksel yoklama sunucu ile istemci arasında kalıcı veya uzun süreli bir HTTP bağlantısı kullanarak iki yönlü sürekli etkileşim sunarak. Tarayıcılar ve proxy'ler sunucu olayları düşünülerek tasarlanmadığından, bunu başarmak için her biri farklı avantajlara ve dezavantajlara sahip çeşitli teknikler geliştirilmiştir. En büyük engel HTTP "Bu belirtim ... istemcileri birden fazla bağlantı açarken muhafazakar olmaya teşvik eder" ifadesini içeren 1.1 belirtimi.[25] Bu nedenle, gerçek zamanlı olaylar için bir bağlantının açık tutulması, tarayıcının kullanılabilirliği üzerinde olumsuz bir etkiye sahiptir: tarayıcının, bir dizi görüntü gibi önceki bir isteğin sonuçlarını beklerken yeni bir istek göndermesi engellenebilir. Bu, farklı bir ana bilgisayar adı aynı fiziksel sunucu için bir takma ad olan gerçek zamanlı bilgiler için. Bu strateji, alan adı parçalama uygulamasıdır.

Comet'i uygulamanın belirli yöntemleri iki ana kategoriye ayrılır: akış ve uzun yoklama.

Yayın Akışı

Comet akışını kullanan bir uygulama tek bir kalıcı bağlantı -den istemci tarayıcısı tüm Comet için sunucuya Etkinlikler. Bu olaylar, her iki taraf da bağlantıyı kapatmadan sunucu her yeni olay gönderdiğinde istemci tarafında aşamalı olarak işlenir ve yorumlanır.[3]

Comet yayınını gerçekleştirmek için özel teknikler şunları içerir:

Gizli iframe

Dinamik web uygulaması için temel bir teknik, gizli bir iframe HTML öğesi (bir satır içi çerçeve, bir web sitesinin bir HTML belgesini diğerinin içine yerleştirmesine izin verir). Bu görünmez iframe, bir yığın halinde blok, örtük olarak sonsuz uzunlukta olduğunu bildirir (bazen "sonsuz çerçeve" olarak adlandırılır). Olaylar meydana geldikçe, iframe kademeli olarak senaryo tarayıcıda yürütülecek JavaScript içeren etiketler. Tarayıcılar HTML sayfalarını aşamalı olarak oluşturduğundan, her biri senaryo etiketi alındıkça yürütülür. Bazı tarayıcılar, ayrıştırma ve yürütme başlamadan önce belirli bir minimum belge boyutu gerektirir; bu, başlangıçta 1-2 kB dolgu alanı gönderilerek elde edilebilir.[26]

İframe yönteminin bir yararı, her yaygın tarayıcıda çalışmasıdır. Bu tekniğin iki dezavantajı, güvenilir bir hata işleme yönteminin olmaması ve istek çağırma sürecinin durumunu izlemenin imkansızlığıdır.[26]

XMLHttpRequest

XMLHttpRequest Ajax uygulamaları tarafından tarayıcı-sunucu iletişimi için kullanılan bir araç olan (XHR) nesnesi, bir XHR yanıtı için özel bir veri formatı oluşturarak ve tarayıcı tarafı JavaScript kullanarak her olayı ayrıştırarak sunucu-tarayıcı Comet mesajlaşması için hizmete sunulabilir. ; yalnızca tarayıcıya güvenerek onreadystatechange her yeni veri aldığında geri arama.

Uzun yoklamalı Ajax

Yukarıdaki akış aktarımlarının hiçbiri, olumsuz yan etkiler olmaksızın tüm modern tarayıcılarda çalışmaz. Bu, Comet geliştiricilerini tarayıcıya bağlı olarak aralarında geçiş yaparak birkaç karmaşık akış aktarımı uygulamaya zorlar. Sonuç olarak, birçok Comet uygulaması, tarayıcı tarafında uygulanması daha kolay olan uzun yoklamayı kullanır ve en azından XHR'yi destekleyen her tarayıcıda çalışır. Adından da anlaşılacağı gibi, uzun yoklama, istemcinin sunucuyu bir olay (veya bir dizi olay) için yoklamasını gerektirir. Tarayıcı, sunucuya tarayıcıya gönderilecek yeni veriler gelene kadar açık tutulan ve tarayıcıya tam bir yanıt olarak gönderilen Ajax tarzı bir istekte bulunur. Tarayıcı, sonraki olayları almak için yeni bir uzun yoklama isteği başlatır. IETF RFC 6202 "İki Yönlü HTTP'de Uzun Çağırma ve Akışın Kullanımı için Bilinen Sorunlar ve En İyi Uygulamalar" Uzun yoklama ve HTTP akışını karşılaştırır.Uzun yoklamayı gerçekleştirmek için özel teknolojiler şunları içerir:

XMLHttpRequest uzun yoklama

Çoğu kısım için, XMLHttpRequest uzun yoklama, herhangi bir standart XHR kullanımı gibi çalışır. Tarayıcı, sunucudan eşzamansız bir istek yapar ve yanıt vermeden önce verilerin kullanılabilir olmasını bekleyebilir. Yanıt, kodlanmış veriler içerebilir (tipik olarak XML veya JSON ) veya müşteri tarafından yürütülecek Javascript. Yanıtın işlenmesinin sonunda, tarayıcı bir sonraki olayı beklemek için başka bir XHR oluşturur ve gönderir. Böylelikle tarayıcı, her olay gerçekleştiğinde yanıtlanacak şekilde sunucuyla her zaman bekleyen bir isteği tutar.

Komut dosyası etiketi uzun yoklama

Herhangi bir Comet taşımacılığı, alt alanlar, yukarıdaki taşımalardan hiçbiri farklı ikinci düzey alanlar (SLD'ler), tarayıcı güvenlik politikaları nedeniyle siteler arası komut dosyası oluşturma saldırılar.[27] Yani, ana web sayfası bir SLD'den sunuluyorsa ve Comet sunucusu başka bir SLD'de bulunuyorsa ( kaynaklar arası kaynak paylaşımı etkin), Comet olayları, bu aktarımları kullanarak ana sayfanın HTML ve DOM'unu değiştirmek için kullanılamaz. Bu sorun, bir Proxy sunucu Kaynakların birinin veya her ikisinin önünde, aynı alandan geliyormuş gibi görünmesini sağlar. Bununla birlikte, karmaşıklık veya performans nedenleriyle bu genellikle istenmeyen bir durumdur.

İframe'ler veya XMLHttpRequest nesnelerinin aksine, senaryo etiketler herhangi bir noktaya işaret edilebilir URI ve yanıttaki JavaScript kodu, geçerli HTML belgesinde yürütülecektir. Bu, ilgili her iki sunucu için potansiyel bir güvenlik riski oluşturur, ancak veri sağlayıcısına yönelik risk (bizim durumumuzda, Comet sunucusu) kullanılarak önlenebilir. JSONP.

Dinamik olarak oluşturularak uzun yoklamalı bir Comet aktarımı oluşturulabilir senaryo öğeleri ve kaynaklarının Comet sunucusunun konumuna ayarlanması, daha sonra JavaScript'i (veya JSONP), yükü olarak bir olay ile geri gönderir. Komut dosyası isteği her tamamlandığında tarayıcı, XHR uzun yoklama durumunda olduğu gibi yeni bir tane açar. Bu yöntem, web alanları arası uygulamalara izin verirken tarayıcılar arası olma avantajına sahiptir.[27]

Alternatifler

Tarayıcıya özgü teknolojiler, Comet teriminin doğasında vardır. Yoklamayan HTTP iletişimini iyileştirme girişimleri birden çok taraftan geldi:

  • HTML 5 tarafından üretilen taslak şartname Web Hypertext Uygulama Teknolojisi Çalışma Grubu (WHATWG) sözde belirtir sunucu tarafından gönderilen etkinlikler,[28] yeni bir JavaScript arayüzünü tanımlayan EventSource ve yeni bir MIME türü metin / olay akışı. Microsoft Internet Explorer dışındaki tüm büyük tarayıcılar bu teknolojiyi dahil edin.
  • HTML 5 WebSocket API çalışma taslağı, bir sunucuyla kalıcı bir bağlantı oluşturmak ve bir sunucu aracılığıyla mesaj almak için bir yöntemi belirtir. onmessage geri çağırmak.[29]
  • Bayeux protokolü Dojo Vakfı. Tarayıcıya özgü aktarımları yerinde bırakır ve tarayıcı ile sunucu arasındaki iletişim için daha yüksek düzeyde bir protokol tanımlar, böylece yeniden kullanıma izin verilir. istemci tarafı JavaScript birden çok Comet sunucusu ile kodlama ve aynı Comet sunucusunun birden çok istemci tarafı JavaScript uygulamasıyla iletişim kurmasına izin verme. Bayeux, bir yayınlama / abone olma modelini temel alır, bu nedenle Bayeux'u destekleyen sunucular yerleşik yayınlama / abone olma özelliğine sahiptir.[30]
  • BOSH XMPP standartları vakfının protokolü. İki eşzamanlı HTTP bağlantısı kullanarak tarayıcı ve sunucu arasında çift yönlü bir akışı taklit eder.
  • JSONRequest nesnesi, tarafından önerilen Douglas Crockford, XHR nesnesine bir alternatif olabilir.[31]
  • Gibi eklentilerin kullanımı Java uygulamaları veya tescilli Adobe Flash programı (kullanarak RTMP Flash uygulamalarına veri akışı için protokol). Bunlar, uygun eklentinin kurulu olduğu tüm tarayıcılarda aynı şekilde çalışma avantajına sahiptir ve HTTP bağlantılarına dayanmaları gerekmez, ancak eklentinin yüklenmesini gerektirme dezavantajı vardır.
  • Google duyuruldu[32] için yeni bir Kanal API'si Google Uygulama Motoru,[33] tarayıcıdaki bir istemci JavaScript kitaplığının yardımıyla Comet benzeri bir API uygulamak. Bu API kullanımdan kaldırıldı. [34]

Ayrıca bakınız

Referanslar

  1. ^ Krill, Paul (24 Eylül 2007). "AJAX ittifakı mashup'ları tanır". InfoWorld. Alındı 2010-10-20.
  2. ^ Crane, Dave; McCarthy, Phil (13 Ekim 2008). Kuyruklu Yıldız ve Ters Ajax: Yeni Nesil Ajax 2.0. Apress. ISBN  978-1-59059-998-3.
  3. ^ a b Çakıl, Rob. "Comet Programlama: Sunucu İtmesini Simüle Etmek İçin Ajax Kullanma". Webreference.com. Arşivlenen orijinal 2010-10-18 tarihinde. Alındı 2010-10-20.
  4. ^ Egloff Andreas (2007-05-05). Java Business Integration (JBI) ile Ajax Push (diğer adıyla Comet) (Konuşma). JavaOne 2007, San Francisco, Kaliforniya: Sun Microsystems, Inc. Alındı 2008-06-10.CS1 Maint: konum (bağlantı)
  5. ^ a b "Ajax Push". ICEfaces.org. Alındı 2014-10-23.
  6. ^ Crane, Dave; McCarthy, Phil (Temmuz 2008). Kuyruklu Yıldız ve Ters Ajax: Yeni Nesil Ajax 2.0. Apress. ISBN  1-59059-998-5.
  7. ^ a b Mahemoff, Michael (Haziran 2006). "Web Uzaktan Kumandası". Ajax Tasarım Modelleri. O'Reilly Media. pp.19, 85. ISBN  0-596-10180-5.
  8. ^ Çift, Chris (2005-11-05). "Ajax ve sunucu push hakkında daha fazla bilgi". Sunucu zorlaması yapmanın farklı yolları. Alındı 2008-05-05.
  9. ^ Nesbitt, Bryce (2005-11-01). "Yavaş Yükleme Tekniği / Ters AJAX". Standart Bir Web Tarayıcısında Sunucu Push Simülasyonu. Arşivlenen orijinal 2006-02-08 tarihinde. Alındı 2008-05-06.
  10. ^ Russell, Alex (2006-03-04). "Comet: Tarayıcı için Düşük Gecikmeli Veriler". Alındı 2014-11-02.
  11. ^ "Netscape.com". 15 Kasım 1996 tarihinde orjinalinden arşivlendi. Alındı 2017-08-16.CS1 bakımlı: BOT: orijinal url durumu bilinmiyor (bağlantı)
  12. ^ "java.net.Socket (Java 2 Platform SE v1.4.2)" Arşivlendi 19 Mayıs 2009, Wayback Makinesi
  13. ^ Beca, Lukasz (1997). "TANGO - Dünya Çapında Ağ için İşbirliği Ortamı". Syracuse Üniversitesi YÜZEY. Kuzeydoğu Paralel Mimarlık Merkezi, Mühendislik ve Bilgisayar Bilimleri Fakültesi. Alındı 27 Şubat 2016.
  14. ^ Podgorny, Marek; Beca, Lukasz; Cheng, Gang; Fox, Geoffrey C .; Jurga, Tomasz; Olszewski, Konrad; Sokolowski, Piotr; Walczak, Krzysztof; PL (20 Haziran 2000), Amerika Birleşik Devletleri Patenti: 6078948 - İşbirliğine dayalı oturumlarla sanal odalara sahip sanal topluluklar oluşturmak için platformdan bağımsız işbirliği omurgası ve çerçevesi, alındı 2016-02-27
  15. ^ Baer, ​​Troy (1999). "TANGO Interactive'i Dağıtılmış Bir Atölyede Kullanma Deneyimleri" (PDF). CEWES Başlıca Paylaşılan Kaynak Merkezi. CEWES MSRC / PET TR / 99-21. Alındı 27 Şubat 2016.
  16. ^ "CometDaily: Comet ve Push Teknolojisi". Arşivlenen orijinal 2007-11-13 tarihinde. Alındı 2007-12-15.
  17. ^ Just van den Broecke (1 Mart 2000). "Pushlets: Olayları sunucu uygulamalardan DHTML istemci tarayıcılarına gönderin ”. JavaWorld. Alındı ​​Agustos 1 2014.
  18. ^ Borland, John (2001-04-01). "" Yenile "düğmesi geçerliliğini yitirecek mi?". CNET Ağları. Alındı 2008-07-22.
  19. ^ Alex Russell (3 Mart 2006). "Comet: Tarayıcı için Düşük Gecikme Verileri Arşivlendi 2008-08-12 Wayback Makinesi ”. Alex Russell’ın blogu. Erişim tarihi: 29 Kasım 2007.
  20. ^ K. Taft, Darryl (2006-05-12). "AJAX Araç Setinden Microsoft Scrubs Comet". eWEEK.com. Alındı 2008-07-21.
  21. ^ Yörüngeli: Kuyrukluyıldızı Kitleler İçin Etkinleştirme: OSCON 2008 - O'Reilly Konferansları, 21-25 Temmuz 2008, Portland, Oregon
  22. ^ Enterprise Comet & Web 2.0 Canlı Sunum Arşivlendi 2008-05-20 Wayback Makinesi
  23. ^ Dion Almaer (29 Eylül 2005). "Jotspot Live: Canlı, grup not alma ”(Abe Fettig ile röportaj). Ajaxian. Alındı ​​15 Aralık 2007.
    Matt Marshall (15 Aralık 2006). "Renkoo, tatil kokteyllerini planlamak için zamanında etkinlik hizmetini başlattı ”. Venture Beat. Alındı ​​15 Aralık 2007.
  24. ^ Clint Boulton (27 Aralık 2005). "Startup'lar AJAX Bandwagon'una Sahip ”. DevX News. Erişim tarihi: 18 Şubat 2008.
  25. ^ Köprü Metni Aktarım Protokolü (HTTP / 1.1): Mesaj Sözdizimi ve Yönlendirme, bölüm 6.4. IETF. Erişim tarihi: 2014-07-29
  26. ^ a b Holdener III, Anthony T. (Ocak 2008). "Olmayan Çerçeveli Sayfa Düzeni". Ajax: Kesin Kılavuz. O'Reilly Media. s. 320. ISBN  0-596-52838-8.
  27. ^ a b Flanagan, David (2006-08-17). "13.8.4 Siteler Arası Komut Dosyası". Kesin Kılavuz JavaScript. Kesin Kılavuz. O'Reilly Media. s.994. ISBN  0-596-10199-6.
  28. ^ Ian Hickson, ed. (2007-10-27). "6.2 Sunucu tarafından gönderilen DOM etkinlikleri". HTML 5 - Yorum Çağrısı. WHATWG. Alındı 2008-10-07.
  29. ^ Hickson, Ian (2009-04-23). "WebSocket API". W3C. Alındı 2009-07-21.
  30. ^ Alex Russell; et al. (2007). "Bayeux Protokolü - Bayeux 1.0draft1". Dojo Vakfı. Alındı 2007-12-14.
  31. ^ Crockford, Douglas (2006-04-17). "JSONRequest Duplex". Uzun süreli sunucu tarafından başlatılan veri aktarımı için XMLHttpRequest'e bir alternatif. Alındı 2008-05-05.
  32. ^ Uygulama,. (2010-12-02) Google App Engine Blogu: App Engine ekibinden Mutlu Yıllar - 1.4.0 SDK yayınlandı. Googleappengine.blogspot.com. Erişim tarihi: 2014-04-12.
  33. ^ Paul, Ryan. (2010-12-06) App Engine, Akış API'sini ve daha uzun arka plan görevlerini alır. Ars Technica. Erişim tarihi: 2014-04-12.
  34. ^ "Paket com.google.appengine.api.channel". Google. 2019-11-16. Alındı 2020-04-30. Bu API kullanımdan kaldırıldı.

Dış bağlantılar