multiplayer canvas test, performance

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full-stack Developer

As a Full-stack developer at KUBUS, you will develop the (web)applications and services of BIMcollab. You will work on both the front- and back-end. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact in the market, but small enough that as an individual developer you can have an impact and really make a difference. Our development team consists of over 40 developers, testers, scrum masters and product owners, divided over

Bekijk vacature »

Ontwikkelaar Identity & Access Management

Dit ga je doen Als Identity & Access Management Ontwikkelaar zorg jij er voor dat studenten, medewerkers en docenten de juiste benodigdheden op het juiste moment kunnen gebruiken; Het juist opslaan van onderzoeksdata en het openbaar beschikbaar stellen van publicaties (Open Access); Studenten, collega's en wetenschappers ondersteunen; Agile en Scrum werken; Technisch Applicatiebeheer; Ontwikkelen in One Identity Manager en VB.NET. Hier ga je werken Als Ontwikkelaar kom je terecht in een hecht team die zich richt op wetenschappelijke informatie en ICT. Jij bent degene die er voor zorgt dat alle informatie, uit diverse onderzoeken, bij de juiste personen terecht komt.

Bekijk vacature »

.NET developer

Functie Als developer heb jij de keuze om aan te sluiten bij het team (13 developers) die op locatie projectmatig bij klanten werkt. Wanneer jij liever intern bij de werkgever werkt is er ook alle ruimte voor jou in het interne team (8 developers) van dit bedrijf. Je werkt samen aan verschillende projecten bij of voor de klant. Het project wordt aangeleverd door sales aan de project manager. Die maakt samen met de Resourcer een planning en op basis daarvan wordt uit het development team een “projectgroep” opgesteld. Hoeveel en welke projecten jij wilt oppakken gebeurt geheel in samenspraak met

Bekijk vacature »

Frontend Developer

Dit ga je doen Door ontwikkelen van het online platform Deel uitmaken van verschillende ontwikkelteams Meedenken over UI/UX vraagstukken Uitdragen van Front-end binnen de organisatie Hier ga je werken Deze organisatie, gevestigd in de omgeving van Amsterdam, is een grote onderwijs instelling met meerdere vestigingen en een groot aantal studenten. Zo telt deze organisatie +/- 35.000 gebruikers. Bij deze organisatie staat jouw ontwikkeling centraal en is er veel ruimte voor eigen initiatieven. In samenwerking met jouw team ga jij de online omgeving verder ontwikkelen. In de rol van Front end Developer zal jij 50% van jouw tijd werken in het

Bekijk vacature »

Senior front-end developer (React)

Functie Momenteel zijn ze op zoek naar een ervaren front-end developer. Als senior werk je nauw samen met 5 collega developers. Een klein scrum team dus, met korte lijnen waardoor jouw ideeën snel tot uitvoering gebracht kunnen worden. De huidige applicaties worden veelal ontwikkeld met o.a. React, Redux, TypeScript. Ze zijn echt op zoek naar een kartrekker in het team. Naast het meedenken over, opzetten en uitvoeren van bijvoorbeeld de architectuur of toepassing van nieuwe technieken krijg je ook veel tijd om de meer junior (front-end) developers te begeleiden. Hierin nemen ze graag de tijd om mensen de ruimte te

Bekijk vacature »

Java Developer

Dit ga je doen Ontwerpen en bouwen van nieuwe functionaliteiten binnen de complexe omgeving; Proactief de processen kwalitatief en efficient inrichten; Opzetten van Unit Tests; Code Reviews; Regie nemen voor innovatieve projecten; Landschap beheren en de bijbehorende ketens hierbij in het oog houden. Hier ga je werken De organisatie is actief binnen de financiele branche en heeft een IT afdeling van circa 450 man. De organisatie voorziet de maatschappij binnen de financiele dienstverlening en is gedurende de jaren een onmisbare schakel geworden. Het is een high profile organisatie waar ze veel te maken hebben met veranderingen voortkomend uit maatschappelijke ontwikkelingen,

Bekijk vacature »

PHP Developer (junior functie)

Functie omschrijving Ben jij een starter en wil je werken bij een jong en leuk bedrijf? Lees dan verder! Wij zijn op zoek naar een PHP Developer binnen een junior functie. Binnen dit bedrijf gaat het om persoonlijke aandacht en ontwikkeling! Je komt te werken voor een leuk communicatiebureau die alles op het gebied van online en offline communicatie doet. Dit doen zij voor verschillende branches, waardoor je aan diverse soorten projecten mag werken, dit maakt deze baan erg leuk! Daarbij werk je aan een door hun zelf ontwikkeld framework welke goed leesbaar is. Je maakt voor bedrijven op maat

Bekijk vacature »

Software Ontwikkelaar PHP

Functie omschrijving Full Stack Software Ontwikkelaar gezocht! Voor een bedrijf in de regio van Ermelo zijn wij op zoek naar een Software Ontwikkelaar die gaat bijdragen aan het door ontwikkelen, onderhouden en optimaliseren van SaaS applicatie van dit bedrijf. Hierbij ga jij voor- en samenwerken met de klanten van de organisatie, het is hierbij dus van groot belang dat je communicatief vaardig bent en dat je beschikt over beheersing van zowel de Nederlandse als Engelse taal. Bedrijfsprofiel Waar ga je werken? Altijd al in een echt familiebedrijf willen werken? Dan is dit je kans! Het bedrijf waar je komt te

Bekijk vacature »

.NET developer

Functie Als .NET developer wordt jij onderdeel van ons ICT team. In dit multidisciplinaire team ben jij samen met onze senior .NET ontwikkelaar en medior .NET ontwikkelaar verantwoordelijk voor ons ERP systeem. In dit systeem (Navision) ga jij leren ontwikkelen. Wij bieden jou dan ook een gedegen opleiding aan, samen met de ondersteuning van onze Senior .NET developer. Daarnaast ga jij aan de slag met ons portaal geschreven in Sharepoint. Verder ben jij verantwoordelijk voor EDI verkeer en het ontwikkelen binnen het ERP systeem en andere toepassingen en rapportages. Van jou wordt verwacht dat jij het proces goed leert kennen

Bekijk vacature »

Junior Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Samenwerken in een team van 10 collega's; Opleveren van mooie eindproducten, middels de Agile methodiek; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als startende IT-professional kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven.

Bekijk vacature »

Java Full Stack Developer

Java Full Stack developer What makes Cognizant a unique place to work? The combination of rapid growth and an international and innovative environment! This is creating a lot of opportunities for people like YOU — people with an entrepreneurial spirit who want to make a difference in this world. At Cognizant, together with your colleagues from all around the world, you will collaborate on creating solutions for the world's leading companies and help them become more flexible, more innovative and successful. And this is your chance to be part of the success story: we are looking for a (Senior) Java

Bekijk vacature »

Full stack .NET developer Microsoft 365

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Junior .NET Developer

Dit ga je doen Ontwikkelprocessen verder optimaliseren en verder ontwikkelen met C#; CI/CD-pipelines automatiseren; Ontwikkelen van herbruikbare componenten; Front-end pagina's gebruiksvriendelijk maken. Hier ga je werken Als junior .NET Developer kom je terecht binnen een grote en internationale organisatie. Zij streven naar een positieve impact op de mens, milieu en maatschappij. Het bedrijf is oorspronkelijk een familiebedrijf en werkt aan de productie van hoogwaardige en technische systemen voor de gezondheidszorg. Momenteel willen zij betere ontwikkelprocessen creëren op internationaal gebied en staat kwaliteit en veiligheid voor hun op nummer 1! Als junior .NET Developer werk je aan het ontwikkelen van verbeterde

Bekijk vacature »

Low Code Developer voor o.a. overheidsprojecten!

Bedrijfsomschrijving Wil jij ook behoren tot de specialist in Low Code? Dan zou ik zeker aanraden om verder te lezen. Deze organisatie is ooit opgericht door twee studenten en is inmiddels uitgegroeid tot een serieuze werkgever met een groot aanzien op Low Code projecten. De sfeer is echter niet veranderd, er heerst een informele sfeer met een open deuren beleid, en hierin mag de eigen bar natuurlijk niet ontbreken. Momenteel maakt deze organisatie een flinke groei door en hier kan jij natuurlijk niet bij ontbreken. Daarom ben ik op zoek naar Low Code Developers met een degelijke technische achtergrond. Kennis

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een ontwikkelteam met 15 developers en twee testers. Samen zijn jullie verantwoordelijk voor financiële applicaties met meer dan 50.000 gebruikers. Een deel van het team is verantwoordelijk voor de webapplicaties van deze organisatie. Ook zijn er twee app ontwikkelaars werkzaam in het team die zich focussen op de mobiele applicatie. Als .NET ontwikkelaar ga jij aan de slag met de webapplicaties van deze organisatie. Hierbij maak jij o.a. gebruik van C# .NET, ASP.NET, T-SQL, Angular en TypeScript. De nadruk van jouw functie ligt wel op de backend van de applicatie. Wat jouw functie

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

19/04/2024 15:42:27
 
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.