Davno sam testirao comet chat i mogu reći da je to jedan od boljih IM sistema koji sam probao.
Comet chat koristi "heartbeat" sistem za proveravanje novih poruka. To znači da se na svakih par sekundi (ili više) preko AJAX zahteva proverava da li postoji nova nepročitana poruka u bazi podataka. Svaka poruka sadrži polje "read" - ako je read 1 onda je poruka pročitana, ako je 0 onda nije. Ako duže vreme nema poruka timeout za proveravanje poruka se povećava, tako da se na kraju poruke proveravaju na svakih 30 (ili više) sekundi. To sve može da se podesi.
Znači ako neko duže ne chatuje onda se "heartbeat" inkrementalno povećava za par sekundi, a sve to da bi se uštedeli resursi (ako nema novih poruka duže vreme, nema potrebe da se na svakih par sekundi proveravaju iste. Ali ako stigne nova poruka "heartbeat" sistem se restartuje i poruke se normalno proveravaju). Takođe, sve poruke se smeštaju u sesiju (ili cookies, ne mogu da se setim) kao niz, tako da se iz baze uzimaju samo nove poruke. Time mogu da se uštede resursi pogotovo kada je veliki saobraćaj.
Comet chat sistem nastoji da maksimalno štedi resurse. Upit koji je konstantan izgleda na primer ovako:
Code:
SELECT COUNT(id) FROM messages WHERE user_id = TVOJ_ID and read = 0;
Ako nema poruka AJAX call se produžava za 1 sec i sve do 30 (ili manje/više)
Ako postoji nepročitana poruka prvo se prikazuju poruke iz sesije (ili cookies) i tek onda nova poruka iz baze. Prikazana nova poruka ažurira polje read na 1.
To je neki osnovni koncept koji dobro radi u praksi, ali ako je veliki saobraćaj u pitanju (mnogo ljudi online i chatuje) ovaj sistem može dosta opteretiti server. Za tako nešto se obično koristi AJAX Push tehnika (primer:
http://www.ape-project.org/)
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};