praegune kellaaeg 19.06.2025 13:00:28
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
andiweb
HV vaatleja
liitunud: 16.04.2003
|
26.05.2009 20:43:07
AJAX, Reverse AJAX |
|
|
Aretan siin ühte asja Google Maps API-t kasutades. Kuna seal tekib selline olukord, kus serveri poole pöördumisi tuleks hästi palju, sest kasutajaid on palju ja muutuvaid asju on palju, siis mõtlesin, et äkki saab niimoodi, et saadetakse iga kord kui midagi serveris muutub kõikidele kasutajatele ühe korraga teade, et midagi muutus. Nii ei peaks kõik kasutajad pidevalt natukese aja tagant küsima, kas midagi muutus.
Leidsin siis sellise asja nagu Reverse AJAX. PHP-le on olemas veel selline tore Reverse AJAX framework nagu XAJA. Ühes foorumis aga räägiti, et Reverse AJAX on hoopis rohkem resursinõudlikum kui tavaline AJAX. Keegi oskab öelda kas sellel on ka mingi tõepõhi all? Või oskab keegi välja pakkuda viisi kuidas ma saaks oma probleemi kuidagi teistmoodi lahendada?
|
|
tagasi üles |
|
 |
linnumees
HV kasutaja
liitunud: 15.06.2005
|
26.05.2009 23:01:44
|
|
|
Comet märksõnaks.
Igasugune ressursikasutus oleneb rakendusest ja seda pead Sa ISE testima ja katsetama, mitte uskuma mingit suvalist jorssi kusagil foorumis, kellest Sa midagi ei tea.
Ilma konkreetse rakenduse kirjelduseta on muidugi raske täpsemini aidata.
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
andiweb
HV vaatleja
liitunud: 16.04.2003
|
27.05.2009 10:23:10
|
|
|
linnumees kirjutas: |
Comet märksõnaks.
Igasugune ressursikasutus oleneb rakendusest ja seda pead Sa ISE testima ja katsetama, mitte uskuma mingit suvalist jorssi kusagil foorumis, kellest Sa midagi ei tea.
Ilma konkreetse rakenduse kirjelduseta on muidugi raske täpsemini aidata. |
Cometini jõudsin eile õhtul ise ka, uurin ja vaatan.
Rakenduse kirjeldusest:
Google Mapsil põhinev rakendus. Kasutajad saavad lisada kaardile markereid, muuta nende asukohtasid.
Põhimõteliselt on rakenduses kaks asja, mis pidevalt muutub: Markerite asukoht ja markeritele klikates avaneva infoakna html.
Niipalju kui ma aru olen saanud, siis Comet hoiab pidevalt ühendust serveri ja kliendi vahel lahti, kui midagi serveris uut juhtub, siis annab ka kliendile teada. Suurim probleem selle asja juures on vist see, et brauserid ei luba just eriti palju ühendusi ühe hosti kohta lahti hoida. Kui kasutaja peaks mu lehel juhuslikult mitmel lehel korraga ühendust lahti hoidma, siis võib asi kinni joosta.
|
|
tagasi üles |
|
 |
linnumees
HV kasutaja
liitunud: 15.06.2005
|
27.05.2009 15:21:45
|
|
|
Palju Sul neid markereid on? Võib-olla on üldse mõttekam neid kõiki pidevalt korraga uuendada, teed näiteks mingi staatilise faili selle jaoks ja uuendad mingi aja tagant, kasutad mõnda reverse proxyt või midagi sarnast, et Su server maha ei kooleks.
Kui ikkagi tahad asja Cometi baasil teha, on Sul ilmselt mõttekas kirjutada serveri poole mingi proge, mis hoiab kõigi kasutajatega ühendusi lahti, mingi aja tagant kontrollib uuendusi ning saadab kõigile korraga laiali. Iga kliendi kohta hakata andmebaasist pärima läheb ilmselt liiga ressursinõudlikuks, aga see oleneb jällegi, palju Sul objekte ja kasutajaid on ning kus Su rakendus üldse paikneb.
Ma ise pole veel tegelikult Cometi põhise rakenduseni jõudnud, kuigi kunagi sai seda üpris korralikult katsetatud mingi asja jaoks...
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
28.05.2009 13:38:25
|
|
|
Kas kõik kasutajad näevad samu markereid ? Või igal kasutajal eraldi ? Ja kui tihti andmed muutuvad ning kui oluline on et kasutajad kohe näevad ?
Kui kõik näevad sama infot siis soovitaks sellist lähenemist, et salvestad sisu kuskile staatilisse javascript faili mida siis kasutajate browser küsib (fail.js?time=12233342342 stiilis kus selle time väärtuse paned browseri javascriptis alati kaasa et saaks kindlalt uusima sisu).
Kui sobib see et minuti tagant info muutus jõuab kasutajateni, siis paned serverisse cron'ga iga minuti tagant php skripti jooksma mis seda js faili üks kord minutis uuendab. Browseris paned infi näiteks iga 30 sekundi tagant küsima ja olemas.
Kui vaja täpsemalt infot edastada, siis pane ikkagi cron'ga skript tööle, aga skriptis pane 1 minuti jooksul mitu korda lihtsalt seda javascript faili uuendama ja kasutad usleep käsku et täpselt iga 5 sekundi tagant uuendada.
NB! kui sul on palju kasutajaid (sellest ka optimiseerimise teema) siis oleks hea .htaccess failiga antud javascript faili puhul Connection: close header kaasa panna, et iga kasutaja jaoks ühendust ripakile ei jääks ja minimaalselt serverit koormaks.
Kui aga igal kasutajal eraldi info vastavalt tema profiilile/õigustele vms, siis on juba keerukam sellist lahendust teha.
Enda kogemuste põhjal või öelda et see Comet/reverse ajax/push lahendus on hea siis, kui sul on reaalajas kindlasti uuendamist vajav info + vähe kasutajaid või suurtes kogustes raha mida serverisse investeerida. Väiksema arvu kasutajatega funktsioneerib asi kenasti, suurema hulga kasutajate puhul aga on need lahtiolevad ühendused pigem peavaluks ja serverile väga suureks koormuseks ja tavalise veebiserveri tõmbavad ülikiirelt umbe ära. Näiteks võib tuua et hiljutises sendioksjoni buumis kõik peale mini.osta.ee kasutasid tavalist lähenemist, et browserist küsitakse uut infot. Ja mini.osta.ee vaevles päris pikalt oma selle lahendusega mis pidevalt jamas (ühendus kukkus maha ja siis enam ei funganud miski normaalselt).
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
andiweb
HV vaatleja
liitunud: 16.04.2003
|
28.05.2009 22:15:59
|
|
|
inzinz kirjutas: |
Kas kõik kasutajad näevad samu markereid ? Või igal kasutajal eraldi ? Ja kui tihti andmed muutuvad ning kui oluline on et kasutajad kohe näevad ?
Kui kõik näevad sama infot siis soovitaks sellist lähenemist, et salvestad sisu kuskile staatilisse javascript faili mida siis kasutajate browser küsib (fail.js?time=12233342342 stiilis kus selle time väärtuse paned browseri javascriptis alati kaasa et saaks kindlalt uusima sisu).
Kui sobib see et minuti tagant info muutus jõuab kasutajateni, siis paned serverisse cron'ga iga minuti tagant php skripti jooksma mis seda js faili üks kord minutis uuendab. Browseris paned infi näiteks iga 30 sekundi tagant küsima ja olemas.
Kui vaja täpsemalt infot edastada, siis pane ikkagi cron'ga skript tööle, aga skriptis pane 1 minuti jooksul mitu korda lihtsalt seda javascript faili uuendama ja kasutad usleep käsku et täpselt iga 5 sekundi tagant uuendada.
NB! kui sul on palju kasutajaid (sellest ka optimiseerimise teema) siis oleks hea .htaccess failiga antud javascript faili puhul Connection: close header kaasa panna, et iga kasutaja jaoks ühendust ripakile ei jääks ja minimaalselt serverit koormaks.
Kui aga igal kasutajal eraldi info vastavalt tema profiilile/õigustele vms, siis on juba keerukam sellist lahendust teha.
Enda kogemuste põhjal või öelda et see Comet/reverse ajax/push lahendus on hea siis, kui sul on reaalajas kindlasti uuendamist vajav info + vähe kasutajaid või suurtes kogustes raha mida serverisse investeerida. Väiksema arvu kasutajatega funktsioneerib asi kenasti, suurema hulga kasutajate puhul aga on need lahtiolevad ühendused pigem peavaluks ja serverile väga suureks koormuseks ja tavalise veebiserveri tõmbavad ülikiirelt umbe ära. Näiteks võib tuua et hiljutises sendioksjoni buumis kõik peale mini.osta.ee kasutasid tavalist lähenemist, et browserist küsitakse uut infot. Ja mini.osta.ee vaevles päris pikalt oma selle lahendusega mis pidevalt jamas (ühendus kukkus maha ja siis enam ei funganud miski normaalselt). |
Tänud heade nõuannete eest. Sain ise ka aru, et see Comet'i asi hakkaks mu serverit hoopis rohkem koormama kui sellest kasu oleks. Mingil määral saan kindlasti seda sinu poolt staatilise javascripti faili asja kasutada, kuid palju on mul ka sellist infot, mis on igal kasutajal erinev.
|
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|