JS Multiplayer ideeën
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?
http://www.phphulp.nl/php/forum/topic/ajaxjson/76219/last/
Cross site AJAX? indien gebruikers een webserver thuis hebben kan het op die manier?
Cross site AJAX? indien gebruikers een webserver thuis hebben kan het op die manier?
PHP is hiervoor simpelweg ongeschikt omdat je geen openstaande verbindingen kan gebruiken.
@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?
Google ook eens op 'Comet PHP'.