DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   (X)HTML, JavaScript, DHTML, XML, CSS (http://www.devprotalk.com/forumdisplay.php?f=8)
-   -   Automatsko osvezavanje (http://www.devprotalk.com/showthread.php?t=9961)

Shelle 28. 04. 2011. 01:01

Automatsko osvezavanje
 
Pozdrav ljudi.
Nov sam ovde (tj nisam nov ali prvi put pišem :) ) jer sam skontao da ako ovde ne nađem odgovor verovatno neću nigde :)
Naime, zanima me sledeće:
Recimo da imamo Osobu A koja je za svojim računarom i Osobu B koja je za nekim udaljenim računarom. Oni istovremeno gledaju neki sadržaj na sajtu (koji je izvučen iz baze). Kako mogu da uradim da, kada se taj sadržaj izmeni na neki način (bilo administrator bilo neki drugi korisnik) da se automatski prikaže i Osobi A i Osobi B bez refreša??? (nešto kao npr neki komentar na FB, gde kada neko nešto iskomentariše automatski se prikaže svim korisnicima koji se nalaze na toj strani).
Ne tražim da mi neko uradi ili šta već, nego samo da mi objasni kako se to radi, jer moje znanje AJAX-a ne obuhvata taj slučaj :)

Imam još jedno pitanje ali neću sada smarati s tim, jer mi je ovo važnije i ako ovo ne odradim to drugo mi neće ni trebati :)

ajankovic 28. 04. 2011. 01:22

Postoje dva načina.

Prvi je da browseri obe osobe konstantno u pozadini preko AJAX poziva proveravaju u određenom intervalu da li je došlo do promene. Ukoliko je došlo do promene osveži se odgovarajući sadržaj.

Drugi način je daleko komplikovaniji jer podrazumeva tehnologiju koja bi trebalo da natera "internet" da radi ono za šta nije napravljen. Odnosno oba klijenta održavaju konekciju sa serverom, ne zatvaraju je a server ih obavesti preko otvorene konekcije kada dođe do promene. Ako te interesuje potraži COMET na googlu.

tripatwhat 28. 04. 2011. 17:38

Pozdrav,

pa zavisi da li je taj sadrzaj na celoj strani ili samo u jednom delu strane.

Ako je cela strana onda mozes kroz metu da kazes toj strani da se refreshuje posle odredjenog vremena.

Ako je deo strane onda mozes kroz iframe da uvuces sadrzaj sa druge strane (na kojoj stavis ove podatke iz baze) i onda toj strani koju uvlacis kroz iframe kazes kroz metu da se refreshuje posle odredjenog vremena.

Evo koda za refresh strane kroz meta podatke posle 120 sekundi:
<meta http-equiv="refresh" content="120; url=index.php">

Shelle 28. 04. 2011. 22:44

Hvala vam za odgovore.
Ne treba mi cela strana već samo neki delovi (ovako nešto http://www.nekajacu.com/list/live ). Ovde ima više ovih aukcija i svaka ima sopstveni brojač. Mene zanima kako mogu da uzmem vreme iz baze (za više aukcija) i onda da pomoću JS-a odbrojavam, i kada neko klikne da se automatski poveća vreme svim ljudima koji to gledaju.
Ja kapiram jedino ovaj način gde bi svaki korisnik, svake sekunde, proveravao bazu preko AJAX-a, ali sada mi se javio novi problem, kako pozivati AJAX svake sekunde i to za više aukcija istovremeno???
AJAX koji sam do sada radio se aktivirao preko nekog događaja (klik na link, na dugme, padajuća lista itd) ali ovo ne zahteva nikakvu akciju...
Ova fora sa refrešom preko meta taga može da odradi posao, ali mislim da postoji bolji način, jer on nije baš optimalan a i refrešuje celu stranu...

mileusna 28. 04. 2011. 23:11

Citat:

kako pozivati AJAX svake sekunde i to za više aukcija istovremeno??? Ja kapiram jedino ovaj način gde bi svaki korisnik, svake sekunde, proveravao bazu preko AJAX-a, ali sada mi se javio novi problem, AJAX koji sam do sada radio se aktivirao preko nekog događaja (klik na link, na dugme, padajuća lista itd) ali ovo ne zahteva nikakvu akciju...
Postoje tajmeri u JavaScriptu, ali pozivanje AJAXA svake sekunde je recept za katastrofu i potpuno je bespotrebno, osim ako ne radiš neku krajnje kritičnu aplikaciju za američku Vladu. :)

Za period od jedne sekunde ti nemaš garanciju ni da će prethodni http poziv biti odrađen i vratiti rezultate, a ti već šalješ novi http zahtev? To neće biti dobro ni za server a ni za klijent browser, zavisi naravno i od broja poseta i ukupnog broja upita. Dakle uzmi neki veći interval, 30 sekundi recimo.

ajankovic 28. 04. 2011. 23:18

Potrebno ti je više znanja nego što trenutno poseduješ da bi ovo uspešno implementirao. Ali pokušaću da te navedem na pravi put.

"kako pozivati AJAX svake sekunde"

Da bi konstantno izvršavao određenu funkciju u browseru potrebna ti je setInterval() funkcija.

" i to za više aukcija istovremeno???"

Ovo pitanje pokazuje da nisi dobro razumeo sistem koji pokušavaš da implementiraš. Može se implementirati na više načina. Na primer najjednostavniji način ti je da svaka aukcija ima jedinstveni identifikator. Na serveru napraviš skriptu koja ispituje stanje akucije. Toj skripti prosledjujes identifikator aukcije a ona vraća informacije o toku aukcije.

Što se tiče sinhronizacije vremena sve mora da se odvija na serveru. Odnosno server sadrži svu logiku za upravljanje akcijama. Merenje i prikazivanje vremena u browseru služi samo kao referenca koja se osvežuje na osnovu informacija koje server pruža.

jablan 28. 04. 2011. 23:21

Citat:

Originalno napisao mileusna (Napišite 97917)
Za period od jedne sekunde ti nemaš garanciju ni da će prethodni http poziv biti odrađen i vratiti rezultate, a ti već šalješ novi http zahtev?

Nije li logično da se sledeći timeout postavi tek u callbacku requesta? Tako garantuješ da se sledeći zahtev neće okinuti dok se prethodni ne odradi.

Plus je tu fazon sa dinamičkim prilagođavanjem tog intervala: kad duže nema saobraćaja, povećaš interval na (npr) 5 sekundi, a kad se kuca, smanjiš ga na (npr) pola sekunde...

mileusna 28. 04. 2011. 23:28

Citat:

Originalno napisao jablan (Napišite 97922)
Nije li logično da se sledeći timeout postavi tek u callbacku requesta? Tako garantuješ da se sledeći zahtev neće okinuti dok se prethodni ne odradi.

Plus je tu fazon sa dinamičkim prilagođavanjem tog intervala: kad duže nema saobraćaja, povećaš interval na (npr) 5 sekundi, a kad se kuca, smanjiš ga na (npr) pola sekunde...

Kako god to da uradi, preko intervala ili tajmera, sa 1 sekundom tajmauta će u svakom slučaju ubiti server ako server nije dobro konfigurisan.

Shelle za početak treba da shvati koncept, a posle ti možeš da mu pokazuješ finte i zalamanja. :)

ajankovic 28. 04. 2011. 23:29

^ Čini mi se da bi Shelle prvo trebalo da savlada neke osnove pa tek onda da se bavi tim stvarima :)

ajankovic 28. 04. 2011. 23:34

Off Topic: čini mi se da bulletin board konceptu koristilo malo realtime updejtova kako bismo izbegli ovakve trenutke :)


Vreme je GMT +2. Trenutno vreme je 00:50.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.