[AJAX?] Zoek verschil

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nicoow Unknown

Nicoow Unknown

05/02/2009 15:00:00
Quote Anchor link
Hallo mensen,

Ik ben bezig met een opdracht voor school, en aangezien we die zelf mochten uitkiezen, heb ik mooi de tijd om aan iets te werken wat ik al een tijdje wil.
Maar nu moet ik hiervoor zorgen dat ik (soort van life) kan communiceren tussen twee pc's.
Maar dat moet eigenlijk zo werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
##               ###               ##
##--->--->--->---###--->--->--->---##
##      actie1   ###    actie2     ##
pc1             server             pc2

actie1: Pc1 stuur een signaal naar de server, Die update de database.
actie2: Nadat het signaal van Pc1 is ontvangen, moet de server een signaal doorsturen naar Pc2 die vervolgens een actie uitvoert (bijvoorbeeld een soort van refresh)

Nu is mijn vraag dus,
Hoe kan ik dit het beste doen.
De door mijn bedachte mogelijkheden.
1: Iets met ajax, die dan de met de één of andere vage functie weet dat er iets is geupdate in de database, of die een signaal van de server kan ontvangen. (eventuele con. misschien werkt het niet als JS uitstaat)

2: Een divje maken die om de 3 á 5 seconde een refresh doet voor zichzelf, en kijkt of er een bepaalde waarde in de database veranderd is, zo ja, doe dan een refresh van de gehele pagina, zo niet,, blijf controleren. (eventuele con. Als dit vaak moet gebeuren (bij bijvoorbeeld 100 mensen tegelijk) dan kan dit misschien erg veel band breedte kosten, of kan erg traag worden.

3: Een programma schrijven (in ruby o.i.d.) dat kijkt of er iets binnenkomt, zo ja,, refresh dan de pagina van de anderen. (kan met IP gecheckt worden wie er moeten worden gerefreshed, o.i.d. (eventuele con. Heb geen idee of dit zowieso mogelijk is, maar daarmee moet ik dan gaan experimenteren)

4: Jullie inbreng.

Wat denken jullie dat het beste is,, Als jullie voor 1 gaan,, weet iemand dan ook naar welke functies ik moet gaan kijken van Ajax?

Gegroet,,
Nico Kaag
Gewijzigd op 01/01/1970 01:00:00 door Nicoow Unknown
 
PHP hulp

PHP hulp

05/01/2025 00:48:07
 
Tamara

Tamara

05/02/2009 15:45:00
Quote Anchor link
Ideetje:
Mischien handig als PC2 via een knop de pagina kan verversen ofzo? Dat is wat gebruiksvriendelijker.
 
Nicoow Unknown

Nicoow Unknown

05/02/2009 15:48:00
Quote Anchor link
Het is de bedoeling om een multiplayer game te maken,, niet echt gebruiksvriendelijk als je dan steeds zelf moet refreshen? of wel dan? =P
 
Hipska BE

Hipska BE

05/02/2009 15:50:00
Quote Anchor link
Jij wil de server laten "pushen" naar pc 2, maar dit gaat niet zomaar.

Je zal pc2 moeten laten "pollen" naar de server op bepaalde intervallen.
 
Nicoow Unknown

Nicoow Unknown

05/02/2009 16:16:00
Quote Anchor link
Ok,, is er nog een speciale manier hiervoor,, of moet ik gewoon een divje maken,, die een soortemet van oneindige loop heeft, en die dan even 3 seconden een tukje gaat doen, en dan weer opnieuw gaat lopen, net zolang totdat er iets veranderd?
dus ongeveer
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
$state = 0;
while($state == $wanted_state)
{
    $query = "SELECT status FROM game WHERE id='1' LIMIT 1";
    $result = mysql_query($query);
    $fetch = mysql_fetch_assoc($result);
    $state = $fetch['status'];
    if($state == $wanted_state)
    {
        //refresh
    }
    sleep(3);
}
 
Marien xD

Marien xD

05/02/2009 16:49:00
Quote Anchor link
Je denkt veel te veel php door javascript heen. Je kan iets op de server uitvoeren of iets op de client of beide.

Wat jij wil kan alleen maar zo (in php/js):

PC1 -> Server <- PC2

PC1 update iets, en PC2 heeft een javascript draaien (AJAX) die elke X seconden een aanroep doet naar de server of er al een update is. Kijk bijvoorbeeld naar de interval() functies van bekende Javascript librarys.

Er zijn wel andere manieren te bedenken maar die wil je gewoon niet. Vaak omdat het verder gaat dan normale PHP/JS kennis... En aangezien je de vraag hier stelt ga ik er van uit dat je dit niveau nog niet beheerst :)
 
Nicoow Unknown

Nicoow Unknown

05/02/2009 19:52:00
Quote Anchor link
PHP is het probleem niet,, alleen javascript dan weer wel :P
Maar moet ik dan gewoon een php script maken,, die een bepaalde waarde uit de database ophaalt, en die dan checkt, en dat script dan met een intreval() van een js lib laten uitvoeren?

Ik ga morgen wel aan een leraar vragen of ik niet met een ander programma, wat dan op de server draait, dan een push kan sturen, waardoor de page refresht.
 
Hipska BE

Hipska BE

05/02/2009 20:08:00
Quote Anchor link
JSF 2.0 kon push-achtige dingen dacht ik. Maar ik weet niet of die nu al ge-released is.

Ik zou gewoon simpel houden en JS om de xx seconden een request laten uitvoeren en niet omgekeerd.
 

05/02/2009 20:15:00
Quote Anchor link
Als je wilt pushen, dan moet je kijken naar comet, maar dat kan php niet.
 
Remco Anker

Remco Anker

05/02/2009 20:34:00
Quote Anchor link
Je kunt in php wel comet nabootsen, dit is waarschijnlijk beter dan polling.

Het princiepe van comet is dat ajax een openblijvende verbinding met de server maakt. Bij polling stuurt ajax om de zoveel tijd een request naar de server. bij comet, oftewel reverse ajax, kun je in php een loop draaien im te controleren of er iets nieuws is.
In deze loop word sleep/usleep gebruikt. om zonder echo toch data naar de client te kunnen sturen, kan er gebruik worden gemaakt van flush.
Zodra de client data ontvangt van de server, verwerkt javascript deze meteen.

Dus in jouw geval een goede oplossing. Ik weet niet wat er met ruby allemaal kan, misschien dat iemand daar iets over kan zeggen.
 
Nicoow Unknown

Nicoow Unknown

05/02/2009 20:39:00
Quote Anchor link
@Hipska,
Nu ik Karl z'n linkje zie,, ga ik zeker voor het pushen, Dit omdat je dan alleen maar iets uitvoert waarom er gevraagd word, (in de geval een 4 op een rij, met mulitplayer, dus zodra de ene is geweest, dan is de ander).
En aangezien ik er een class van wil maken, die ik later ook weer kan gebruiken, zou een push veel mooier en netter wezen.
Nu alleen nog even alle pro's en cons op een rijtje zetten, (kom ik denk ik bij long poling uit) en dan maar gaan kijken, begrijpen en toepassen =P

dus @Karl,,
Heel erg bedankt voor de link,, daar kan ik zeker wat mee.
Ik mag namelijk meerdere talen gebruiken,, dus misschien schrijf ik wel een Perl app om een push uit te voeren,, maar ik hoopte al dat er een makkelijkere oplossing was.
 
Hipska BE

Hipska BE

05/02/2009 20:46:00
Quote Anchor link
Waarom gebruik je dan niet meteen JSF, die heeft push notifications ingebouwd.

Ik heb op een presentatie een voorbeeld gezien met een pizzadelivery bestellingopvolging.
 
Nicoow Unknown

Nicoow Unknown

05/02/2009 21:06:00
Quote Anchor link
Ik denk dat ik wat heb gevonden,,
Ziet er intressant uit moet ik zeggen,,
Alleen nu heb ik wel ff leeswerk =P
Overigens gebruik ik nu dit (halfe) boekwerk, een verlsag van een student aan de TU delft doe hier over gaat (Integration of HTTP Push with a JSF
AJAX framework)

Dus ik ga lekker lezen, mochten er nog suggesties zijn,, dan hoor ik die graag.
 

05/02/2009 21:40:00
Quote Anchor link
Remco Anker schreef op 05.02.2009 20:34:
Je kunt in php wel comet nabootsen, dit is waarschijnlijk beter dan polling.

Kan wel, maar of dat nou zo verstandig is.

Remco Anker schreef op 05.02.2009 20:34:
Het princiepe van comet is dat ajax een openblijvende verbinding met de server maakt. Bij polling stuurt ajax om de zoveel tijd een request naar de server. bij comet, oftewel reverse ajax, kun je in php een loop draaien im te controleren of er iets nieuws is.
In deze loop word sleep/usleep gebruikt. om zonder echo toch data naar de client te kunnen sturen, kan er gebruik worden gemaakt van flush.
Zodra de client data ontvangt van de server, verwerkt javascript deze meteen.

Gefelicteerd, je hebt Comet beschreven, maar je hebt niet gekeken of dit kan worden toegepast d.m.v. PHP. Je kunt wel heel leuk met sleep en unsleep php laten doordraaien, maar dit is niet aan te raden. Het eerste probleem wat je tegen zult komen is dat je geheugen te kort krijgt. Verder heeft php volgens mij ook onder bepaalde omstandigheden problemen om naast elkaar te draaien.
Php is er niet voor ontworpen om constant één script te blijven uitvoeren.

Remco Anker schreef op 05.02.2009 20:34:
Dus in jouw geval een goede oplossing. Ik weet niet wat er met ruby allemaal kan, misschien dat iemand daar iets over kan zeggen.

Comet, geen id, zal vast wel als je push'en wilt.
Met php, neen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.