JS Multiplayer ideeën

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan Dam

Johan Dam

09/02/2011 12:05:44
Quote Anchor link
Yoo,

Een tijdje terug had ik een experiment waar verschillende mensen via de browser in real-time een spel konden spelen. (Het spel bestond uit rondjes die konden bewegen)

Op zich werkte het, maar zelfs met 2 personen begon het al laggy te worden en het experiment werd gestaakt.

Nu wil ik er weer nieuw leven in blazen maar eerst maar even naar suggesties vragen.

Het wás zo dat de speler-posities in een database werden opgeslagen, en zodra er iets veranderde (timestamp-check) werden de nieuwe gegevens naar de browsers gestuurd (via AJAX) en op het scherm weergegeven (via Canvas)

Dit zorgde ervoor dat het veilig gemaakt kon worden (dmv van PHP kan je alles controleren dat toegestuurd word, tegen de prijs van langere wachttijd en daarmee minder fps
Ook zorgde dit voor hoge resource kosten, als er 2 spelers tegelijk bewegen met een fps van 24 heb je 48 ajax-requests af te handelen en net zoveel database queries + de db-queries voor de idle-players. Dit tikt snel aan en word dus snel traag.

Ik weet 2 dingen die de performance kunnen verbeteren

1. Gebruik van websockets oid om de informatie door browsers zelf te laten delen, zonder tussenkomst van PHP. Dit scheelt natuurlijk de server een hoop gedoe, maar het zou ook sneller moeten gaan omdat communicatie nu korter is (geen server als tussen persoon)

2. Goeie 'gok' functies. Dit is meer bedoeld om de lag te verbergen dan het op te lossen. Als een speler net nog naar links ging en er is nog geen update van AJAX, nou dan zal die dat nu wel nog steeds doen en dus verplaatst JS de speler soepeltjes naar links totdat het andere info krijgt van de server.

Aan de ene kant lijkt optie 1 ideaal, alleen zit je daar met veiligheid. (valsspelen dmv van lokale JS-Injection) Dit is te verhelpen door elke browser controles uit te laten voeren en zodoende vals spel te kunnen herkennen.
Ook is er het probleem van websocket-compatibility waarvoor ik geen oplossing weet. Ook lijkt het me handig om de server op te laten treden als scheidsrechter waar op vals spel gecontroleerd word.

Maar waarschijnlijk is er nog een betere oplossing waar ik niet aan gedacht heb.

Wat is jullie mening hierover?
 
PHP hulp

PHP hulp

02/11/2024 05:48:58
 
Mebus  Hackintosh

Mebus Hackintosh

09/02/2011 14:07:24
Quote Anchor link
http://www.phphulp.nl/php/forum/topic/ajaxjson/76219/last/

Cross site AJAX? indien gebruikers een webserver thuis hebben kan het op die manier?
 
Pim -

Pim -

09/02/2011 14:50:44
Quote Anchor link
PHP is hiervoor simpelweg ongeschikt omdat je geen openstaande verbindingen kan gebruiken.
 
Kumkwat Trender

Kumkwat Trender

09/02/2011 15:53:21
 
Johan Dam

Johan Dam

10/02/2011 09:35:15
Quote Anchor link
@mebus, Cross site AJAX is natuurlijk ongewenst. Daarom had ik ook websockets genoemd (welke er veel makkelijker in is, als het tenminste ondersteund word) daarmee kunnen 'normale' gebruikers er tenminste ook wat mee ;)

@Pim, normaal zou ik het met je eens zijn, maar ik heb al een aantal voorbeelden gezien waar het wel gebeurd. Waarschijnlijk word de rol van PHP hier gewoon zoveel mogelijk weggelaten.

@Kumkwat, volgens mij is dat wat ik zoek, erg bedankt! Wel jammer dat er flash bij komt kijken.. misschien geschikt als backup voor websockets?
 
Pim -

Pim -

10/02/2011 11:36:26
Quote Anchor link
Google ook eens op 'Comet PHP'.
 



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.