Andrise programmeerimisalane WIKI
PubSubHubbub
PubSubHubbub on lihtne protokoll uute blogipostituste teavitamiseks. Traditsiooniline lähenemine sisaldab endas kliendi poolset blogi pidevat peilimist - kas seal on vahepeal uusi postitusi tulnud või mitte. Näiteks käis Blog.tr.ee robot algusaegadel just niiviisi iga 15 minuti tagant kõiki nimekirjas olevaid blogisid kontrollimas ja kui leidis neist mõne uue postituse, siis kuvas need Blog.tr.ee lehel. Kuid sel ajal oli kataloogis vähem kui sada blogi.
Sellisel peilimisel on mitu suurt probleemi:
- peilimine on aeglane - mida rohkem blogisid on vaja kontrollida, seda suuremaks kujuneb ühe blogi kontrollimise intervall. Lisaks isegi kõige väikseima intervalli puhul kulub uuendamiseks siiski suhteliselt palju aega (postitusi ei leita koheselt, vaid viivitusega)
- suur koormus - blogide peilimine kulutab ribalaiust (vaja on tõmmata RSS failid), serveri CPU'd (failide analüüs) ja RAM'i (analüüsitavad failid tuleb mällu lugeda)
- peilitavale blogile ülekoormuse tekitamine - kui käia väga tihti blogi kontrollimas, samas kui blogisse pole vahepeal midagi lisatud, tekitab see blogile mõttetut koormust. Eriti hull, kui seda sama ei tee korraga mitte üks klient vaid sada klienti (otsingumootorid, erinevad agregaatorid jne)
Peilimisel tekkivate probleemide vältimiseks mõeldigi välja PubSubHubbub. Antud protokoll seob blogi postituste vahendaja, nn. HUB'iga - kui blogisse lisandub postitus, teavitab blogi sellest koheselt HUB'i. HUB aga saadab omakorda info muutuste kohta edasi kõikidele registreeritud tellijatele. Seega kui agregaator on ennast registreerinud vastavas HUB'is blogi jälgijaks, teavitab HUB agregaatorit lisandunud postitustest koheselt ise. Agregaator ei pea enam käima blogisid peilimas vaid võib jääda sisenevad sõnumeid ootama - drastiliselt väheneb kliendi koormus, aga samal ajal hakkavad postitused lisanduma praktiliselt reaalajas.
PubSubHubbub tugi on tänaseks olemas suuremal osal blogidest. Out of the box toetavad seda kõik Blogspot.com, Wordpress.com ja Livejournal.com domeenidel asuvad blogid. Samuti on tugi olemas ka kõikidel FeedBurner'it kasutavatel blogidel. WordPress'i oma domeenil majutamise korral tuleb lisada vajalik plugin, kuna vähemalt versioonides 2.X automaatset PubSubHubbub tuge veel pole.
Kuna PubSubHubbub tugi on suuremal osal blogidest olemas või saab seda kerge vaevaga lisada, vaataks siinkohal just kliendi rolli - kuidas end HUB'i juurde registreerida ja kuidas postitusi vastu võtta.
Formaat
Seda kas blogi toetab PubSubHubbub'i või mitte ja mis on konkreetse blogi HUB aadress, saab teada selle blogi RSS failist. Selle jaoks on kuskil faili päises <link> element, mille rel="hub". Selle elemendi href väärtuseks ongi siis HUB'i aadress (nb - täpne kirjapilt sõltub kas tegu on RSS või ATOM feed'iga).
<link rel="hub" href="http://pubsubhubbub.appspot.com/" />
Kui HUB aadress on teada, tuleb teha HUB'i pihta registreerimispäring. Registreerimispäring kujutab endast POST päringut HUB'i pihta, kus POST väljad kirjeldavad ära, et kes ja mis blogi pihta registreerimist teha tahab.
Vajalikud väljad on järgnevad:
hub.mode- Tegevuse kirjeldus, registreerimiseks peab väärtus olemasubscribehub.callback- URL kuhu hakatakse saatma teateid uutest postitustesthub.verify- Mis viisil toimub autentimine, siinkohal kasutame asünkroonset varianti, väärtuseks peab olemaasynchub.verify_token- Salajane tekst, mille abil saab vältida spämmiblogide registreerimist agregaatori pihta (kui HUB teeb hiljemhub.callbackaadressi pihta autentimispäringu, annab ta kontrolliks kaasa sellesamahub.verify_tokenväärtuse).hub.topic- Blogi RSS aadress
Seega päring HUB'ile võiks välja näha nii:
hub.mode=subscribe&hub.callback=http://www.example.com/receive&hub.verify=async&hub.verify_token=saladus&hub.topic=http://blog.url/rss
Autentimine
Juhul kui klient üritab regisreerida jälgimiseks HUB'is blogi, teeb HUB kliendi callback aadressi pihta autentimispäringu. Tegu on GET päringuga, mille parameetrites on kirjas registreerimisinfoga.
Olulisted parameetrid on järgnevad:
hub_verify_token- sama väärtus, mis registreerimispäringuga saadetudhub.verify_tokenväärtus. Juhul kui need väärtused ei klapi, on midagi valesti (näiteks on keegi registreerinud HUB'is spämmiblogi sinu agregaatori pihta)hub_lease_seconds- oluline väärtus, mis annab teada, kauaks registreerimine kehtib. Väärtus näitab aega sekundites kuni selle momendini, mil registreerimine HUB'is kustutatakse. Selle järel tuleb blogi jälgimine HUB'is uuesti registreerida. Antud käitumine on vajalik „surnud klientide“ vältimiseks - võibolla on agregaator ammu kinni pandud, aga HUB saadab sõnumeid sinna endiselt edasi.hub_mode- näitab mis tüüpi päringuga on tegu.subscribenäitab et tegu on registreerimisega.hub_topic- Blogi RSS aadress, mida hakatakse jälgimahub_challenge- väga oluline väärtus - see tuleb väljastada päringu vastuseks, vastasel korral loeb HUB päringu ebaõnnestunuks.
Postituste vastuvõtmine
Uutest postitustest teatamine käib nagu autentiminegi registreerimisel seatud callback URL'i pihta. Sellisel juhul teeb HUB antud aadressi pihta POST päringu, mille body on üks suur RSS fail, mis sisaldab blogis tehtud muutusi (selles asuvad uued postitused ning ka vanad postitused, mida on on muudetud). Seda millise blogi RSS'iga on täpsemalt tegu, tuleb ise välja selgitada.
Kokkuvõtteks
Üldine töövoog oleks seega järgmine:
- Klient laeb alla blogi RSS faili ja kontrollib sellest HUB'i olemasolu
- Klient teeb HUB'i pihta POST päringu regsireerimisandmetega
- HUB teeb GET päringu callback URL'i pihta, klient vastab sellele
hub_challengeväärtusega - HUB teeb POST päringuid callback URL'i pihta, päringu sisuks on RSS fail muudatustega (ainult ühe blogi kohta, eraldi blogide kohta tehakse eraldi päringud)
- Kui
hub_lease_secondsarv sekundeid on registreerimisest möödunud, alatakse registreerimisega otsast peale
Kui hästi otsida, leiab netist ka PubSubHubbub klient-tarkvara implementatsioone, kuid kuna tegu on suhteliselt lihtsa protokolliga, ei tohiks see ka ise tehes üle jõu käia.
Käidud rada: • wordpress • tookeskkond • pubsubhubbub