multiplayer canvas test, performance

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back-end Developer

Functieomschrijving Voor een erkende werkgever in de regio van Middelburg zijn wij op zoek naar een enthousiaste PHP / Symfony Developer. Een ambitieus persoon die het gemotiveerde development team komt versterken met het realiseren van nieuwe en complexe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor professionele groei? Dit ga je doen: Je bent verantwoordelijk voor de beheer en ontwikkeling van de serviceportal in Symfony en de webshops in de tweede versie van Magento; Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten;

Bekijk vacature »

Full Stack Developer

Dit ga je doen Ontwikkelen van Product Informatie Management (PIM) systemen; Werken aan zowel grotere als kleine projecten voor toonaangevende klanten binnen o.a. de retail; Verantwoordelijk voor de front-end werkzaamheden; Naast de front-end werk je ook aan de backend. Hier ga je werken Als Full Stack Developer komt je te werken binnen een vooruitstrevende organisatie die Product Informatie Management (PIM) systemen levert aan hun klanten. Hun klanten zijn toonaangevende bedrijven binnen o.a. de retail. De organisatie zit gevestigd in regio Zwolle en bestaat uit zo'n 35 medewerkers, waarvan 30 IT. Je komt te werken binnen één van de zelfsturende development

Bekijk vacature »

Anaplan Developer

Dit ga je doen What are you going to do: Picking up Stories: Design planning had, how are we going to build it in Anaplan; Talking to the end user to build a forecasting model; Having contact with the data team about which data is needed; Being able to convert an Excel sheet into a 3, 4 or 5 dimensional modeling environment; Giving knowledge sessions about Anaplan; Solving incidents; Making instructional videos on how teams should read forecasts; Writing blogs about forecasting. Hier ga je werken We are looking for an Anaplan Builder to deliver end-to-end solutions within a big

Bekijk vacature »

Senior Front-end Developer

Wordt jij de nieuwe Front end specialist / developer? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel binnen als

Bekijk vacature »

Back end Node.js developer

Functie Het ontwikkelteam bestaat momenteel uit 5 (back-end) Developers, 2 systeembeheerders, 1 DevOps engineer, 1 Tech Lead en 2 Scrum Masters. Samen wordt er doorontwikkeld aan twee SaaS-platformen die in een hoog tempo doorontwikkeld moeten worden. Omdat innovatie een belangrijk speerpunt binnen de organisatie is, wordt er ook continu naar snellere en slimmere oplossingen te bedenken en realiseren. Als Back-end Developer hou jij je dagelijks bezig met vraagstukken zoals: API-development, high volume datastromen, het ontwikkelen van Bots aan de hand van A.I. Daarnaast denk en werk jij mee aan de onlineapplicaties voor klanten. Er wordt zelfstandig en in teamverband gewerkt

Bekijk vacature »

C# .NET Software Ontwikkelaar

Functie omschrijving Gezocht: Software Developer C# .NET voor een dynamische organisatie! Ben je onlangs afgestudeerd of ben je toe aan de volgende stap in je professionele carrière? Lees dan verder! We zijn momenteel op zoek naar een Software Developer die klaar is voor een nieuwe uitdaging en die onze eindklant in de regio Arnhem kan versterken. In deze functie werk je aan verschillende projecten en bezoek je vaak klanten. Je kunt een rol verwachten met veel uitdaging, diversiteit en verantwoordelijkheid. Bedrijfsprofiel Binnen welke organisatie ga je aan de slag? Je gaat werken bij een organisatie die zich specialiseert in het

Bekijk vacature »

Lead Front-end developer

Functie Hun huidige applicatie worden ontwikkeld in o.a. React, Redux, TypeScript. Ze werken graag met de nieuwste technieken en tooling en zoeken ook developers die hier proactief op zoek naar gaan. Als senior/lead developer ben je een kartrekker in het team. Naast het meedenken over bijvoorbeeld de architectuur of toepassing van nieuwe technieken krijg je ook veel tijd om de meer junior (front-end) developers te begeleiden. Zo kun je bijvoorbeeld 1 dag in de week met 2 collega’s bezig zijn om samen met hen te kijken naar hun ontwikkeling, doelstellingen en uiteraard de gewenste begeleiding hierin. Hiernaast sta je als

Bekijk vacature »

C# .NET Developer

Dit ga je doen Ontwikkelen van de Back-end in .NET6 / C# en WebAPI (Focus);) Ontwikkelen van de Front-End in Nodje.js en Angular (secundair); Ontwikkelen in Blazor; Opstellen van een technisch ontwerp; Testen, documenteren en implementeren van de nieuwe applicatie; Verzorgen van de nazorg, na de implementatie. Hier ga je werken Binnen deze organisatie werken duizenden mensen binnen allerlei verschillende disciplines. Tevens hebben zij veel specialiteiten in huis, waaronder ook .Net Developers. Ter uitbreiding van een nieuw team en ter ondersteuning van het project zijn ze opzoek naar een nieuwe collega voor het team. Als C#.NET Developer zal jij je

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een development team met één Senior .NET developer en één junior .NET developer. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit moment veel gebruik van .NET met ASP.NET. Komend kwartaal gaan wij wel gedeeltelijk overstappen naar .NET Core. Verder werken wij ook met SOAP, REST, JSON, HTML5, CSS3

Bekijk vacature »

REMOTE - Front-end Angular developer

Functie Het IT-team bestaat momenteel uit de IT Manager, 2 back-end developers, 1 fullstack developer, 1 designer en een DevOps engineer. Ze zijn momenteel op zoek naar een ervaren Front-end developer die autonoom en gedisciplineerd aan de slag gaat, en bij aanvang als enige developer met hun Front-end applicaties bezig is. Wel hebben ze de ambitie om hier snel een 2e developer bij te vinden die jij dan ook zal kunnen aansturen/begeleiden. Je zult aan de slag gaan met het doorontwikkelen van hun bestaande UI in Angular. Maar ook het ontwikkelen van een mobiele app. Hierbij hechten ze veel waarde

Bekijk vacature »

C# Developer

Functie omschrijving Voor een softwarebedrijf in de omgeving van Veghel zijn we op zoek naar een C# developer. Word jij blij van ontwikkelen in C# en .NET? Lees dan snel verder! Jouw werkzaamheden zullen er als volgt uit gaan zien: Door middel van ASP.NET, MVC Framework en C# ga je webshops, websites en webapplicaties ontwikkelen. Je zorgt voor de optimalisatie van bestaande software en de automatisering van bedrijfsprocessen. Op basis van de wensen van de klant ga je samen met je collega's ga je op zoek naar de juiste oplossingen en je gaat dit uitwerken tot een mooi eindproduct. Bedrijfsprofiel

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

Bekijk vacature »

Junior Java Developer

Dit ga je doen Full stack web- en appdevelopment; Vertalen van de functionele wensen naar de technische specificaties; Sturing geven aan/klank board zijn voor de software teams; Trainen van de software teams; Sparren met klanten; Meedenken over architectuur. Hier ga je werken De organisatie is een bureau welke websites en mobiele applicaties bouwt voor verschillende toonaangevende organisaties. Hierbij richten zij zich voornamelijk op de sectoren leisure, overheid en zorg. De sfeer intern kenmerkt zich door informaliteit, gezelligheid en ambitie. Ze werken dag in dag uit samen om mooie producten op te leveren voor hun klanten. Op dit moment zijn er

Bekijk vacature »

C# Developer

Dit ga je doen De requirements in kaart brengen van de klant; Implementeren van functionele en technische specificaties bij opdrachtgevers; Oplossen van bugs; Meewerken aan maatwerksoftware voor nieuwe opdrachtgevers; Het testen en uitleveren van nieuwe functionaliteiten naar de acceptatie en productieomgeving De database ontwikkelen en onderhouden; Hier ga je werken Onze klant is gevestigd in het westen van Nederland en is gespecialiseerd in het ontwikkelen van software voor de levensmiddelen industrie. De software die het team maakt optimaliseert voornamelijk de administratieve processen, maakt deze meetbaar en zorgt ervoor dat de data zo goed mogelijk gebruikt kan worden. Binnen een van

Bekijk vacature »

Medior Front end developer React

Functie Voor deze functie ben ik op zoek naar een enthousiaste front end developer die communicatief vaardig is. Jij wordt onderdeel van een enthousiast jong team dat werkt aan grote websites. Binnen jouw rol ben jij diegene die de vertaling maakt van design naar functionele code en zorg jij voor goede experience op meerdere platformen. Dit doe je natuurlijk door gebruik te maken van Javascript, HTML, CSS en React. Daarnaast wordt er gebruik gemaakt van Webcomponents en verschillende authenticatie tools. Doordat er hier gestreefd wordt naar de beste gebruikerservaringen, wordt het product constant doorontwikkeld. Hierdoor blijven ze voor op de

Bekijk vacature »
Johan Dam

Johan Dam

06/09/2010 10:12:26
Quote Anchor link
Goede morgen, allemaal,

Omdat ik nogal graag nieuwe dingen probeer, heb ik besloten om een canvas multiplayer test te maken.

Ajax om speler-input naar een database te sturen en meteen alle speler info op te halen om het vervolgens door Canvas allemaal weer te geven.

Een simpel voorbeeld hiervan was snel gemaakt
Voor de mensen die zich nu hetzelfde afvragen als ik voordat ik ermee begon,

Ja, de performance is nogal matig, lag is meer een regel dan een uitzondering. Nu is er een kleine kans dat dit aan mijn localhost + computer ligt maar om de een of andere reden betwijfel ik het.

Dus nu mijn vraag, wie denkt te weten hoe de performance te verbeteren valt?

Beveiliging en browser compatibiliteit zijn niet inbegrepen. Het is maar een test om te kijken hoe geschikt deze methode wel of niet is.

De database bestaat uit 1 table met 3 kolommen (id, x en y) dit is simpel gehouden omdat het een prototype is.

De php pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
require 'db_connect.php';
if($_SERVER['REQUEST_METHOD'] == "GET"){
    $result = mysql_query("SELECT id FROM coords WHERE id=" . $_GET['id'] . " LIMIT 1");
    if(mysql_num_rows($result) > 0)
        mysql_query("UPDATE coords SET x=" . $_GET['x'] . ", y=" . $_GET['y'] . " WHERE id=" . $_GET['id'] . " LIMIT 1");
    
    else
        mysql_query("INSERT INTO coords (id, x, y) VALUES (" . $_GET['id'] . "," . $_GET['x'] . "," . $_GET['y'] . ");");
}


$result = mysql_query("SELECT id, x, y FROM coords");
while($row = mysql_fetch_row($result))
    echo $row[0], "-", $row[1], "-", $row[2], "|";
?>


Javascript:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<script type="text/javascript">
// variabele klaarzetten
var ajax = new XMLHttpRequest();
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

var id = 1; // hardcoded, later aan localStorage, of cookie, of IP, of wat dan ook binden, voor testen lekker hardcoded
var x = 225; // hardcoded co-ordinaten
var y = 225;

// bewegen
document.onkeydown = function(event){
    var key = event.keyCode;
    switch(key){
        case 37: // links
            x --;
            break;
        case 38: // omhoog
            y --;
            break;
        case 39: // rechts
            x ++;
            break;
        case 40: // omlaag
            y ++;
            break;
    }
}

// tekenen
function draw(){
    if(ajax.readyState == 4 && ajax.status == 200){
        // canvas wissen
        ctx.clearRect(0,0,canvas.width,canvas.height);
        
        // co-ordinaten ophalen.
        var content = ajax.responseText;
        var players = content.split("|");
        for(i in players){
            if(players[i] != ''){
                var coords = players[i].split("-");
                var p_id = coords[0];
                var p_x = coords[1];
                var p_y = coords[2];
                
                ctx.fillRect(p_x,p_y,50,50);
            }
        }
    }
}

function update(){
    ajax.onreadystatechange = draw;
    ajax.open('GET', 'test.php?id='+id+'&x='+x+'&y='+y, true);
    ajax.send();
}

// zie dit als de 'refresh rate' dit komt neer op 10 fps, we moeten Ajax wel een beetje de tijd geven he,
setInterval("update()", 100);
</script>
Gewijzigd op 06/09/2010 10:16:36 door Johan Dam
 
PHP hulp

PHP hulp

03/05/2024 03:50:13
 
Chris -

Chris -

06/09/2010 10:16:08
Quote Anchor link
Kun je niet beter met JSON werken?

Wat ook scheelt aan performance, is het lozen van MySQL :-)
 
Johan Dam

Johan Dam

06/09/2010 10:20:14
Quote Anchor link
Heb nog niet met JSON gewerkt, maakt dat denk je echt een verschil?

MySQL is al zo klein mogelijk gemaakt, enige wat gebeurd is het updaten van de 'speler' coördinaten en het ophalen van alle andere coordinaten.

Enige wat hierbij verbeterd kan worden is dat de 'eigen speler' coordinaten niet via de db geupdate worden maar lokaal, dan ziet het er vloeiender uit maar daarmee maskeer je de performance ipv het op te lossen.
 
Jelmer -

Jelmer -

06/09/2010 10:27:51
Quote Anchor link
Als je geen lag wilt hebben, zal je toch echt iets anders moeten verzinnen dan polling. Constant aan de server vragen of er iets is gebeurt is niet erg efficiënt, en met meer dan 3 spelers ligt je server plat omdat PHP en MySQL je server vermoorden, wat de lag weer vergroot.

Ik denk dat Long-polling het makkelijkste is te implementeren. Je laat het PHP script gewoon wachten totdat er nieuwe data is alvorens hij een antwoord stuurt. Het PHP script moet dan luisteren naar nieuwe 'events', waarvoor je een soort dbus-achtige server nodig hebt. Iets heel simpels dat een bericht verspreidt naar alle luisteraars wanneer je er eentje naartoe stuurt .

Je laat alle clients verbinding maken met een PHP script, en dat script laat je wachten totdat er nieuwe berichten zijn van die server. Wanneer je dan van positie verplaatst, roep je een PHP script aan dat de nieuwe positie naar die server stuurt. Die verspreid het dan onder alle luisterende verbindingen, die dan de nieuwe positie echo'en en de verbinding verbreken. Zodra de luisterende verbinding verbroken wordt is er nieuwe data, en moet je opnieuw die luisterende verbinding starten. (Je moet alleen nog even nadenken over hoe je ervoor gaat zorgen dat je geen berichten mist, maar dat is vrij simpel)
 
Chris -

Chris -

06/09/2010 10:31:06
Quote Anchor link
JSON maakt niet veel uit verder, maar lijkt me netter dan het splitten wat je nu doet..

Doordat je om de 0.1 seconde (single player) een mysql verbinding opent, 3 query's uitvoert en daarna weer sluit, heb je iedere seconde 30 query's. Dat betekend dus dat je in één minuut, 1800 query's uitvoert... Met twee spelers heb je er dus 3600, 3 spelers 5400 e.d.

Dus nee, MySQL is geen optie...
 
Johan Dam

Johan Dam

06/09/2010 10:51:22
Quote Anchor link
@Jelmer,
Dat klinkt inderdaad als een goede oplossing, of tenminste, als een verbetering :P of het goed is moeten we maar afwachten ;)

@Chris, tja, heb je een alternatief? De mysql code word zo effectief mogelijk gemaakt, het kan misschien met 2 queries als ik de speler registreer zodra de sessie word gestart bijvoorbeeld, al denk ik dat dit de beste oplossing is... Ik weet zo geen alternatief, andere vormen van SQL zullen weinig uitmaken, wegschrijven naar een bestandje lijkt me niet bepaald een vooruitgang...

Ben het met je eens wat JSON betreft, dit is nogal slordig. Zal het waarschijnlijk veranderen als die long-polling goed werkt.
 
Chris -

Chris -

06/09/2010 11:33:57
Quote Anchor link
Ja hoor, wat Jelmer net omschreef werkt perfect! Maar eigenlijk is PHP daar niet voor geschikt ;-)
 
Jelmer -

Jelmer -

06/09/2010 11:45:26
Quote Anchor link
Inderdaad. Een wachtende verbinding kost weer een paar mb met Apache en PHP geladen. Ik heb zelf een oplossing met haproxy en nodejs, waarbij ik een subdomein doorstuur naar nodejs wat dan de polling-verbindingen afhandelt. Op die manier haal ik PHP en Apache tenminste bij de wachtende luisterende verbindingen er al tussenuit. Voor het verzenden heb ik ze er nog wel tussen om te kunnen controleren of iemand wel iets mag sturen, en het te loggen naar de database etc.
 
Johan Dam

Johan Dam

06/09/2010 12:32:52
Quote Anchor link
Chris, dit is een primitief 2d multiplayer canvas game, volgens mij gebruik ik hier weinig dingen die er echt 'geschikt' voor zijn :P

Ik denk niet dat ik het te moeilijk wil gaan maken met de long polling, als hier al een serieus spel uit gaat komen dan word dat voor 2 - 4 spelers oid, en dan is het een grote ALS

Primitieve long polling werkt prima, alleen als je de pijl-toetsen te lang vast houd begint hij te laggen, groot gelijk sinds het dan gewoon een polling word (constante update)

Toevoeging op 06/09/2010 13:57:04:

Voorbeeldje online gezet, werkt best wel aardig :)

http://www.johandam.com/html5_test/game/
 



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.