aDev.si

a dev is all you need

Dinamični dokumenti

Tretji dokument

Pri tretjem dokumentu nismo navedli metainformacij, zato se po prikazu tega dokumenta vse skupaj ustavi. Če želimo, da se postopek prikaza vrti v neskončnost, je treba na začetku tega dokumenta napisati kazalec nazaj na prvega.

Pri takem prikazu informacij seveda nismo omejeni samo na besedila – prikazujemo lahko vse tipe podatkov, ki jih prebavi pregledovalnik. Ob tem pride človeku na misel, da bi iz niza besed ali slik lahko sestavil animacijo (nekaj takega, kar je mogoče izvesti v jeziku java), vendar izkušnje kažejo, da se ob vsakokratnem nalaganju dokumenta obnovi ves zaslon, kar povzroči precej nepotrebnega in predvsem neprijetnega bliskanja, zaradi česar uporabniki ne bodo pretirano veseli takih dokumentov. Precej lepše je ta problem rešiti z drugim postopkom, ki sem ga omenil na začetku.

Strežnik poriva dokument

Ko odjemalec vleče dokument s strežnika, se zveza vzpostavi vsakokrat na novo, kar je precej potratno (najpogosteje traja nekako eno sekundo – odvisno od oddaljenosti odjemalca od strežnika), če že vnaprej vemo, da bomo v kratkih časovnih intervalih sneli s strežnika več dokumentov. Pri postopku, ko strežnik poriva dokumente, ostane zveza vzpostavljena ves čas prenosa, dokument pa se po delih prenese, ko ima strežnik čas za to – potek dogajanja torej v celoti obvladuje strežnik. V tem primeru lahko prenos podatkov na odjemalčevi strani prekinemo kakor navadno s pritiskom na gumb Stop.

Že iz prejšnjih izvajanj vemo, da mora biti na začetku vsakega podatka, ki ga pošlje strežnik, v skladu z MIME opisana vsaj vrsta poslanega podatka, npr.:

content-type: text/html

Na tem mestu bomo uporabili neki drug tip: multipart/x-mixed-replace, ki pove, da je dokument sestavljen iz več blokov (multipart), vsak naslednji blok bo nadomestil prejšnjega (replace; odjemalec torej pokaže novi blok podatkov na tistem mestu, kjer je bil prejšnji, in ga ne dopiše na konec prejšnjega kakor navadno), x- pa nakazuje, da gre za eksperimentalni tip.

Če bi hoteli odjemalcu poslati enako vsebino kakor v prejšnjem zgledu, bi v imenik cgi-bin napisali približno takole proceduro:

#!/bin/ksh echo “content-type: multipart/x-mixed-replace;boundary=–novdokument–” echo ” ” echo “–novdokument–” echo “content-type: text/htmlđn” cat /imenik/dok1.html echo “–novdokument–” sleep 5 echo “content-type: text/htmlđn” cat /imenik/dok2.html echo “–novdokument–” sleep 5 echo “content-type: text/htmlđn” cat /imenik/dok3.html echo “–novdokument–”

S parametrom boundary smo določili niz znakov, ki je ločnik med posameznimi bloki dokumenta. Niz znakov je povsem poljuben, seveda pa se ne sme znajti v vsebini dokumenta, ki ga želimo poslati. Strežnik pošilja bloke drugega za drugim (oziroma, kadar ima čas za to), petsekundni premor (v Unixu) zato dosežemo z ukazom sleep. Vsak blok ima svojo glavo, v kateri je naveden tip podatkov. Odjemalec vse skupaj vidi kakor en sam dolg dokument, zato stalno čaka na nove podatke, dospele pa sproti prikazuje na zaslonu. Če želimo, da se zgornji trije dokumenti (ki zdaj na začetku seveda ne smejo vsebovati tistih metainformacij kot prej) vrtijo v neskončnost, ves postopek uklenemo v zanko while-true-do.

Vsak dokument take vrste mora torej na začetku vsebovati naslednje vrstice:

content-type: multipart/x-mixed-replace;boundary=–novdokument–

Leave a Comment

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja