Comet
Од Википедија, слободна енциклопедија
Comet е програмерска техника која му овозможува на веб серверот да испраќа податоци до клиентот без клиентот претходно да упати барање за тоа (упит/query). Оваа техника ни овозможува развој на event-driven веб апликации кои се извршуваат на страната на веб прелистувачот (на страната на клиентот).
Содржина |
[уреди] Која е потребата за оваа техника
Вообичаено, веб страницата се испраќа до клиентот само кога клиентот истата ќе ја побара. За секое барање на клиентот, прелистувачот иницира HTTP воспоставување на врска (конекција) со веб серверот, веб серверот ги враќа бараните податоци после што врската се прекинува. Прикажаната страница ќе биде освежена само доколку корисникот експлицитно не побара тоа да биде направено, или пак премине на друга страница. Пренесувањето на целата страница може да одземе многу време, така да освежувањето може да предизвика одредена латенција.
За да се надмине овој проблем може да се користиме со AJAX технологијата, која овозможува да се освежат само одредени делови од веб страницата. На овој начин се намалува количината на податоци која треба да се пренесе, а исто така се намалува и латенцијата. Од другата страна се намалува оптовареноста на веб серверот и се зголемува неговата брзина на одговор. Со користење на асинхрон пренос на податоци во позадина, може да се зголеми уште повеќе брзината на веб апликацијата.
Но и понатаму корисникот мора да упати барање до серверот за одредени податоци. Проблемот станува уште поголем кај апликациите кои чекаат да се случи некој настан на страната на серверот, пример доставување на одреден податок од некој друг корисник на апликацијата. Но времето на доставување на податокот не е познато.
Едно решение на овој проблем може да се бара во креирање на процес кој во одредени временски интервали би проверувал дали таков настан се случил на серверот или не. Но ова не е елегантно решение бидејќи овој процес ќе го оптоварува серверот, што директно ќе се отслика на брзината на веб апликацијата. Уште повеќе непотребно ќе се зголеми сообраќајот по мрежата.
Подобро би било серверот да испрати порака до клиентот во оној момент кога ќе се случи настанот, без клиентот да го праша за тоа. На овој начин клиентот не мора периодично да го проверува серверот дали настанот се случил или не; ќе си продолжи да си работи други работи а работата на податоците кои зависат од настанот кој треба да се случи ќе биде извршена кога ќе се добие сигнал од серверот. Ова е точно тоа што Comet има намера да го направи.
[уреди] Технологија
За разлика од нормалниот пренос на податоци помеѓу веб серверот и веб прелистувачот, врската со серверот кога се користи Comet бара специјални конструкции. Апликацијата на клиентската страна мора да продолжи со работа додека воспоставува асинхрона врска со серверот. На страната на серверот, дури и ако барањето воопшто не е опслужено, врската не се прекинува (иако неискористена) се додека не се случи соодветниот настан. Кога настанот ќе се случи, серверот ги гура (анг. push) податоците кон клиентот, кои се генерирани како резултат на промената која настанала, преку веќе воспоставената конекција (врска).
Врската може да биде биде прекината после тоа, но може и да остане отворена и понатаму ако се очекуваат нови настани. Ако има повеќе промени, серверот може да ги испрати податоците од промените преку воспоставената конекција, без клиентот да прави експлицитен упит за нив до серверот.
[уреди] Скалабилност и доверливост (Reliability)
Постојат потенцијални опасности во зависност од тоа колку добро веб серверот ја има иплементирано Comet технологијата. Бидејќи конекцијата се чува отворена се додека настанот не се случи, серверот треба да се грижи за истата подолго време ако настанот не се случува така често. Проблемот станува поизразен ако различни конекции чекаат на различни настани. Справувањето со голем број на конекции може да доведе до проблеми на серверот.
Огнените зидови (анг. Firewalls) и HTTP проксијата помеѓу веб прелистувачот и веб серверот може да предизвикаат дополнителни проблеми. Огнените зидови вообичаено се конфигурирани да ја прекинат конекцијата која е отворена подолго време.
Веб прелистувачите предизвикуваат дополнителни ограничувања: секција 8.1.4 на HTTP 1.1 спецификацијата вели дека "Еден клиент НЕ МОЖЕ да има повеќе од 2 конекции со било кој сервер или прокси", а оваа препорака е почитувана од повеќето веб прелистувачи, вклучително Internet Explorer и Firefox.
[уреди] Имплементации
Постојат неколку имплементации на Comet Ajax server-push моделот, комерцијални и некомерцијални:
- The SmartClient Messaging module (види AJAX IRC Chat пример)
- Lightstreamer. Adaptive HTTP streaming with some AJAX APIs.
- Steve and Jay McDonald’s *Fjax
- Pjax (Push технологија за Ajax)
- Server-Sent Events standards proposal specified by WHATWG
- COMETd Scalable Open Source Comet Framework
[уреди] Види исто така
- Ajax
- Message oriented middleware
- HTTP streaming
- Pushlet
- Push технологија
[уреди] Референци
- Virgil's One™ е COMET имплементација за продажба-, големопродажба-, приватни банки и брокери, целосно интегрирани со Websphere Portal заснован на Live™ од Virgil.
- [http://www.knownow.com/article/?id=154 KnowNow - пионерска имплементација на
Comet]
- Beyond AJAX: Забрзување на веб аплиакциите со Real-Time Event предупредување, од Dr. Rohit Khare (pdf)
- Divmod Athena: Comet имплементација во Python
- DojoToolkit - Recent re-implementation
- Changing the Web Paradigm: Streaming AJAX and Comet (pdf)
- Push Technology for RIA: Two ways of introducing iPush Server to a RIA project
[уреди] Надворешни врски
- Virgil's Live™ пренос на било кој податок од било кој извор до било кој веб клиент и испорака на real-time податоци со мала латенција, висока доверливост, низ огнени зидови и прокси сервери
- Caplin Liberator Докажан, скалабилен, двонасочен високо оптимизиран сервер за пораки кој користи Comet со HTTP/S тунелирање, подржува до 30,000 активни конекции со мала латенција - се користи воглавно од поголеми финансиски инститции нз елиот свет.
- Flex Enterprise Services An approach from Adobe/Macromedia for addressing the same problem using Flash.
- 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.
- ICE Technology Corp.'siPush Server - real-time push data to your RIA.
- Asteroid (a small Comet): Comet in Squeak(Smalltalk), by Diego Gomez Deck
- Fjax: an open, lightweight, cross-browser methodology for Ajax-style development
- COMETd: an open source scalable comet framework. A Dojo foundation sponsored project.