![]() |
|
|||||||||
|
|||||||||
|
| Attention Visitor: |
| You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. |
|
||||||
| Discutii Generale Discutii generale despre PHP. |
![]() |
|
|
Thread Tools | Moduri de afișare |
|
|
#1 |
|
16-Bit Member
Data înregistrării: 17.11.2009
Mesaje: 26
Rep Power: 3 ![]() |
stiti cumva un script de detectare cati useri sunt online pe site? script php/ajax ceva. pe cat posibil in timp real. ..asta e intrebarea..cum poti face ca in acelas timp cand iese un utilizator de pe un site, toti ceilalti sa stie ca el a iesit. automat users online sa fie decrementat cu 1.
aveati vreo idee viabila? |
|
|
|
| Sponsored Links |
|
|
#2 |
|
Spamofob
|
Creezi o baza de date cu "sesiuni":
La afisare e suficient sa extragi numarul sesiunilor active in ultimele 5 minute (valoare folosita curent): Cod PHP:
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!" Oo==oO | w210 owner Last edited by Luxian; 17.03.2010 at 10:20:01. |
|
|
|
|
|
#3 | |
|
16-Bit Member
Data înregistrării: 17.11.2009
Mesaje: 26
Rep Power: 3 ![]() |
Citat:
|
|
|
|
|
|
|
#4 |
|
Spamofob
|
Da, nu e chiar "real-time".
Dacă vrei să te complici, adaugi câteva interogări AJAX la metoda de mai sus (care să confirme că respectivul încă mai are pagina deschisă), dar asta nu o să funţioneze dacă are Javascript dezactivat. Ca să scapi de AJAX, poţi să pui un iframe ascuns, în care să încarci o pagină goala cu autorefresh. Cu una din metodele de mai sus, poţi să scazi intervalul de la ultima vizită (ca să consideri vizitatorul online) până la 30 de secunde. Pentru chestii "real-time", de exemplu cum foloseşte Google-ul, Meebo, şi altele, trebuie o tehnică mai aparte de request-uri AJAX (vezi articolul ăsta de pe wikipedia). De ce anume ai nevoie de real-time pe chestia asta? Poate reuşim să găsim alternative.
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!" Oo==oO | w210 owner |
|
|
|
|
|
#5 | |
|
16-Bit Member
Data înregistrării: 17.11.2009
Mesaje: 26
Rep Power: 3 ![]() |
Citat:
prima metoda data, e interesanta insa destul de nesatisfacatoare, in sensul ca ..poate am un articol mare pe pagina, iar la un user ii ia 8 9 min sa il citeasca + ca poate mai merge pana la baie intre timp si o sa ramana pe aceeasi pagina timp de 15 min (deci fara sa aiba activitate)...automat eu l-as scoate din baza de date si nu va mai fi contorizat. la fel si cei care sunt afisati...aceasi problema poate fi si cu acestia, sa nu socotesc pe unii care sunt pe site si imi sunt si in baza de date.. Trecand mai departe, cu ce vreau sa fac cu adevarat. Ai jucat vreodata sah pe yahoo games? vreau sa fac o pagina pe care cand intri ai un input type text si un buton. in input iti introduci numele si cand apesi pe buton iti dispar acestea si iti apare 1. Numele tau ...iar toti cei care mai sunt pe pagina respectiva sa le apara numele tau..in timp real..cum ca te-ai logat..un multiplayer game de fapt. Un game in care toti trebe sa te vada in momentul in care ai intrat. Ca un chat sa zic asa. Cand ai intrat in camera, trebe sa le apari in lista celorlalti instant. Ce zici de asta? :d |
|
|
|
|
|
|
#6 |
|
Spamofob
|
Ce vrei tu se preateaza la tehnica aceea speciala de care ti-am zis.
O varianta mai simpla ar fi cu request-uri AJAX periodice, dar o sa trebuiasca optimizate si e ceva de munca, mai ales pe testare. Eu am facut la un moment dat un chat, si m-am chinuit putin. La ce vrei tu sa faci iti trebuie oricum tabela aceia de sesiune. Mai adaugi in schimb niste request-uri periodice AJAX:
Incearca pentru inceput sa faci doar partea de login/chat & useri online. PS: partea cu request-uri o sa-ti faca ceva trafic pe server, la mai multi utilizatori (10-20) e posibil sa-ti mearga foarte greu daca nu faci optimizarile necesare pentru micsorarea volumului de date transferat...
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!" Oo==oO | w210 owner |
|
|
|
|
|
#7 |
|
16-Bit Member
Data înregistrării: 17.11.2009
Mesaje: 26
Rep Power: 3 ![]() |
ajax folosesc si eu si atunci cand un utilizator merge pe o pagina poate fi afisat la timp, insa cand iese de pe o pagina...aici e problema. nu poti decat estima ? altfel mai precis oare nu se poate? am citit si articolul acela
deci in momentul in care tu ai iesit de pe site, automat mie sa imi dispari din lista... Last edited by paul alexandru; 17.03.2010 at 13:02:22. |
|
|
|
|
|
#8 |
|
Spamofob
|
Pai cand vrei sa vezi daca userul e online, cauti in tabela de sesiuni si vezi care a are activitate in ultimele 3 secunde de exemplu.
Iar actualizarea ultimei activitati o faci astfel:
Iar requestu-urile AJAX poti sa le faci din 2 in 2 secunde, si o sa ai requesturi pentru:
Astfel, o sa ajungi la intarzieri fata de real time de ordinul a catorva secunde (2 sau 3), ceea ce mi se pare ok. Daca te pricepi la optimizare, poti sa reduci delay-ul pana la 1.5 secunde. Eu de exemplu la chat am reusit sa fac request-uri AJAX odata la 1.2 secunde fara probleme cand sunt multi useri online si 0.75s pentru cativa useri online. Sunt convins ca merge si mai putin, doar ca era putin mai mult de munca.
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!" Oo==oO | w210 owner |
|
|
|
|
|
#9 | |
|
16-Bit Member
Data înregistrării: 17.11.2009
Mesaje: 26
Rep Power: 3 ![]() |
Citat:
da..dar userul poate sa fie pe site si sa nu execute un apel ajax, adica sa fie pasiv 10 sec...deci sa nu aiba activitate..nu il pot trece ca si cum ar fi offline sarind peste partea cu chat...pt inceput ar fi foarte bine doar partea cu intrarea pe site si cu iesirea de pe site sa fie conceputa. cum e pe meebo lista de prieteni...cand intra unu online, instant tie iti apare in lista si cand iese, instant iti iese si tie. asta as vrea sa fac. o aplicatie web de 2 utilizatori (pt inceput) care pot intra pe o pagina si in momentul in care isi introduc numele automat sa ii apara celuilalt vizitator pe pagina cum ca este online. deci intru eu imi scriu numele apas butonul "intra" si automat tie sa iti apara 1. paul iar cand iti introduci si tu numele si apesi "intra", sub numele meu sa apara 2. luxian si la fel si pe pagina mea sa apara acelas lucru... iar cand iesi sa imi dispara mie de pe pagina numele tau si sa ramana doar al meu Last edited by paul alexandru; 17.03.2010 at 13:14:17. |
|
|
|
|
|
|
#10 |
|
Spamofob
|
Requesturile AJAX se fac automat, fara ca userul sa faca nimic (nu trebuie sa apese nici un buton / tasta si nici macar sa miste mouse-ul).
Pentru aceste requesturi trebuie sa faci o functie recursiva, care se apeleaza la incarcarea paginii. Functia va avea forma de genu': Cod HTML:
<script type="text/javascript"> function automaticAjaxRequests(){ // ... cod functie setTimeout('automaticAjaxRequests()', 1000); // a 2a valoare in milisecunde si reprezinta timpul intre requesturi } </script> Cod:
$(document).ready(function(){automaticAjaxRequests();})
Cod:
< body onload="automaticAjaxRequests();" ....
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!" Oo==oO | w210 owner Last edited by Luxian; 17.03.2010 at 13:21:35. |
|
|
|
|
|
#11 | ||
|
16-Bit Member
Data înregistrării: 17.11.2009
Mesaje: 26
Rep Power: 3 ![]() |
Citat:
ah..da...ms mult Citat:
|
||
|
|
|
|
|
#12 |
|
Spamofob
|
Prototype nu am folosit pana acum. Dar din cate am observat seamana foarte mult cu jQuery.
Spor cu dezvoltarea aplicatiei. Si sa ne tii la curent.
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!" Oo==oO | w210 owner |
|
|
|
|
|
#13 | ||
|
16-Bit Member
Data înregistrării: 17.11.2009
Mesaje: 26
Rep Power: 3 ![]() |
Citat:
Citat:
aici e linkul http://ileapaulalexandru.ro/online_status/ Iar pentru cei care vor sa incerce si ei, daca nu vor sa isi mai bata capul, am facut un articol explicat cu tot scriptul necesar cap coada http://browserul-meu.ileapaulalexand...timp-real.html Last edited by paul alexandru; 18.03.2010 at 00:50:21. |
||
|
|
|
|
|
#14 |
|
Spamofob
|
O singură observație ar trebui făcută:
Tu consider un vizitator unic pentru fiecare IP. Ceea ce nu e corect decât în puține cazuri. De exemplu angajații unei firme apar ca fiind același utilizator (un singur ip extern pentru toată firma). De aceea eu am recomandat să folosești session_id(). Id-ul acela e unic pentru fiecare vizitator si nu tine de ip. Plus ca in functie de setarile serverului se salveaza automat in cookies (ca nu cumva sa i se atribuie un alt session id vizitatorului dupa ce acesta face o pauza mai mare). Singurul lucru care se calculeaza dupa ip in ziua de azi sunt vizitatorii unici ai unui site. In rest, totul se face folosind o combinatie de cookies,user-agent, IP si headerul X-FORWARDED-FOR, si multe alte chestii extrase fie cu javascript fie cu flash. Un script de genul celui facut de tine ar trebui sa afiseze 2 vizitatori cand il deschid in 2 browserere diferite. Al tau afiseaza doar 1.
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!" Oo==oO | w210 owner |
|
|
|
|
|
#15 | |
|
16-Bit Member
Data înregistrării: 17.11.2009
Mesaje: 26
Rep Power: 3 ![]() |
Citat:
da...numai ca nu as vrea sa mi se considere doua vizite daca ma conectez eu de pe acelas calculator de pe 2 browsere diferite. |
|
|
|
|
|
|
#16 |
|
Spamofob
|
Eu unul prefer sa ma arate de 2 ori pe mine cand sunt in browsere diferite decat sa imi arate un singur vizitator in loc de 20 care au net prin retele de cartier, firme sau laboratoare.
Plus ca nici un utilizator obisnuit nu are deschise 2 browsere simultan pentru acelasi site.
__________________
www.luxian.ro | "Prieten e cel care te învață să pescuiești, nu cel care îți dă pește!" Oo==oO | w210 owner |
|
|
|
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Moduri de afișare | |
|
|