Avatar billede Six Nybegynder
30. oktober 2009 - 08:49 Der er 5 kommentarer og
1 løsning

PHP: At lave et "being watched" script

Hej eksperter.

Jeg har på flere videosider, f.eks. youtube set at de har en side der hedder noget ala. "Being watched" Så man kan sidde og se igennem hvad andre brugere ser i samme øjeblik, hvis man nu løber tør for ideer til hvad man skal se.

Jeg vil egentlig gerne vide hvordan det er lavet. Ideen er vel i princippet det samme som en "online nu" liste.

Jeg og en kammerat er ved at lave en side (Dog ikke video) hvor vi har brug for noget der ligner den funktion meget. Vi har dog en del problemstillinger.

For at lette min forklaring, siger vi bare at det er videoer vi har med at gøre :)

Vi har for hver video, lavet så man kommer ind på en "ny side" så vi kan trække info ud af databasen for videoens id.

Problem:
Når en bruger er logget ind og går ind på en video, skal det registreres så man kan lave en being watched liste. Man kan jo tjekke om brugeren stadig ser videoen ved hans næste interaktion på siden. Men hvis han lukker browseren ned, ja så kan vi jo intet registrere. Der ville man gøre brug af et timestamp, men hvordan gør andre store sider? og hvad er den mest normale tidsgrænse at sætte, for at give det mest tilnærmelsesvis rigtige resultat?

ville man gøre brug af en database til at registrere alt dette? Vil det ikke bare køre siden i sænk, hvis der konstant laves db kald for hvert sideskift der sker, fra potentielt mange brugere? Vi har overvejet at gøre det med XML, men giver det nogen performance-mæssig forskel? Hvad er jeres forslag til, hvordan det skal gøres :)

Her har youtube deres being watched liste: http://www.youtube.com/videos?s=pop

Jeg håber på noget feedback og nogle tanker om hvordan dette kan løses bedst muligt :)
Avatar billede erikjacobsen Ekspert
30. oktober 2009 - 12:35 #1
De store sider ignorerer nok bare at brugeren holder op med at se videoen. Så man putter den bare i databasen, når den bliver åbnet.

Evt. kan man så sørge for kun at vise den i 5 minutter. Så passer det nogenlunde med at den bliver vist, når den står på listen.
Avatar billede bmdk Nybegynder
30. oktober 2009 - 14:58 #2
Hey erikjacobsen,

Problemet er yderligere, at vi ikke bare kan sige, at den kun må blive vist i 5 minutter eftersom den side, der skal vise indholdet i princippet kan blive kigget på i uendelighed (der er tale om sider med tekst og ikke videoer)

Så i bund og grund er det overordnede spørgsmål: hvordan kan vi (om muligt) kontrollere, at brugeren blot lukker browseren? Vi har gjort os overvejelser om en singleton hjælpe-klasse, der skal bruges til at se på, om brugerens session stadigvæk er aktiv. Problemet her er så, at hvis brugeren lukker browseren, så lever session jo trods alt videre i op til 20 minutter, så vidt jeg husker? Og 20 minutter er jo relativt lang tid for en "being watched" :)
Avatar billede erikjacobsen Ekspert
30. oktober 2009 - 15:23 #3
Det kommer vel an på, om det skal passe 100% hvad der står på listen. Du kan ikke få at vide, med sikkerhed, når en bruger lukker sin browser. Du kan evt lave noget javascript på siden, som en gang i minuttet, fx, kontakter serveren, der så registrerer at brugeren er aktiv.
Avatar billede Six Nybegynder
01. november 2009 - 04:26 #4
Det vi gør pt.

Når en bruger går ind og kigger på en side, bliver det lagt i db'en med et timestamp. Når så brugeren navigerer væk fra vores "showtext" side, kigger vi på om $_SERVER[http_referer] er = showtext, er den det så er brugeren navigeret væk fra showtext. Dvs, den bliver fjernet i db'en.
Vi laver så, hver gang index bliver vist - et tjek på om vores poster i tabellen er mere end 5 minutter gamle, er de det bliver de slettet. Det virker meget fint, men det kan jo nemt blive mange kald i db'en. Men er det måden at gøre det? Ellers må i gerne komme med forslag til en bedre løsning :)
Avatar billede erikjacobsen Ekspert
01. november 2009 - 10:57 #5
Jeg har ikke bedre forslag :(
Avatar billede Six Nybegynder
21. november 2009 - 06:08 #6
Så er det vidst på tide at få lukket ;D

Tak for dine tanker Erik :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester