multiplayer canvas test, performance

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Ontwikkelaar C# .NET

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Amersfoort gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Bedrijfsprofiel De organisatie waar je voor gaat werken heeft een onafhankelijk dataplatform ontwikkelt voor de agrarische sector.

Bekijk vacature »

Low-code developer

Functie omschrijving Heb jij altijd al een training willen volgen in het buitenland? Voor een leuke opdrachtgever in omgeving Alphen ad Rijn zijn wij op zoek naar kandidaten die aan de slag willen als Low Code Developer! Beschik jij over HBO/WO nivo, bij voorkeur Informatica, maar een ander technische opleiding zoals bijv. wiskunde, natuurkunde is ook goed. Heb jij aantoonbare affiniteit met IT en ben jij gedreven, enthousiast, communicatief vaardig en klantgericht? Lees dan snel verder! Je wordt getraind tot een volwaardig Low Code Developer, het traject ziet er als volgt uit: Start 1e week januari, opleiding van 3 weken

Bekijk vacature »

Software developer

Werkzaamheden voor jou als software developer Voor een goede relatie in de regio Zwolle (meerdere locaties) zoeken wij een software developer die betrokken is bij de ontwikkelcyclus en verantwoordelijk is voor het testen en keuren van nieuwe en geoptimaliseerde software. In deze functie ben je in de implementatiefase de persoon die risico's beoordeelt en intern oplossingen aanbrengt om risico's te verkleinen. Binnen het ontwikkelteam van de software ben je een belangrijke schakel waar je intensief meewerkt met scrum. Het voorkomen van bugs in de programma's en het bevorderen van gebruiksvriendelijkheid voor eindklanten zijn voor jou een uitdaging en geeft voldoening

Bekijk vacature »

JAVA Programmeur

Bedrijfsomschrijving Functieomschrijving We zoeken per direct enthousiaste software engineers die ons team komen versterken.We werken in DevOps teams met een sterk gevoel voor verantwoordelijkheid. Er wordt nauw samengewerkt met ons Business analyse team (BAT), met onze uitvoerende medewerkers en met de DevOps teams onderling binnen het domein. Het liefst hebben we veel en vaak interactie met onze interne en externe eindgebruikers om zo de juiste dingen te maken. We werken multidisciplinair in een dynamische omgeving. Achtergrond opdracht De Businesseenheid Examens is verantwoordelijk voor de logistiek van de staatsexamens Voortgezet (speciaal) onderwijs, Nederlands als 2e taal en schoolexamens. In het kader

Bekijk vacature »

C# developer

Functie Als ervaren Software Engineer wordt jij verantwoordelijk voor het bedenken en ontwikkelen van technische (maatwerk) oplossingen voor onze klanten en dit samen met de klant af te stemmen. Jij wordt o.a. verantwoordelijk voor de doorontwikkeling het software pakket welke voor ons enorm belangrijk is. Dit pakket zorgt er namelijk voor dat wij complete productielijnen kunnen aansturen en monitoren. Daarnaast heb jij actief contact met onze hoofdvestiging om het software achter een van onze systemen te verbeteren en te herschrijven. Momenteel zijn onze C# applicaties geschreven met o.a. Winforms. Echter hebben wij de actieve ambitie om dit te gaan herschrijven

Bekijk vacature »

Java Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 12946 Introductie We are looking for a Java Developer! Our client is one of the most innovation companies located within the Netherlands. We provide high quality software in a high-tech and challenging market. Functieomschrijving The department is specialized in creating and developing high quality software for manufacturing automation in a high tech environment. We strive to provide our clients with high quality software and deliver state of the art solutions in a variety of ways. Creating software infrastructure using Java SE / EE Create applications to fine tune manufacturing processes

Bekijk vacature »

Lead developer (PHP, Symfony, DDD)

Functie Als Lead developer zorg je ervoor dat het team (bestaande uit zowel junior als ervaren developers) in staat is om de kwaliteit van de software (en code) verder te verhogen. In samenwerking met het team, de product owner en de andere lead developers zet je technische lijnen uit en bepaal je de prioriteiten per sprint. Lijkt het jou interessant om complexe problemen op te lossen en bijvoorbeeld een nieuwe applicatiestructuur in Symfony op te zetten? Dan komen wij graag met je in contact. Eisen • HBO werk- en denkniveau (ze kijken niet naar papieren, maar naar denkniveau, motivatie en

Bekijk vacature »

Lead developer

Functie Als lead developer wordt jij verantwoordelijk voor een van onze development teams. Samen met de Software Architect bewaak jij de kwaliteit en uitvoering van onze complexe vraagstukken. Daarnaast ben jij verantwoordelijk voor het inschatten, designen en ontwikkelen van middelgrote tot grote veranderingen in de software. Ook coördineer jij het proces rondom complexe technische vraagstukken. Verder bestaat jouw takenpakket uit het volgende: – Het aansturen van jouw development team; – Het begeleiden van Junior Software Engineers; – Het maken van technische analyses m.b.t. nieuwe aanvragen en het tijdsbestek inschatten voor de uitvoering hiervan; – Het uitvoeren van de ontwikkeling van

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Back-end programmeur

Functieomschrijving Heb jij recent jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een erkende werkgever in regio Waalwijk zijn wij op zoek naar een back-end developer. Kennis of ervaring met C# & SQL is een must! Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten; Je bent verantwoordelijk voor de beheer en ontwikkeling van de software; Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je test de software en ontwikkelt deze door; Je brengt de aanpassingssuggesties van klanten in kaart, om ze

Bekijk vacature »

Software Developer .NET

Functie omschrijving .NET developer gezocht! Wij zoek op zoek naar een .NET Developer die zich niet uit het veld laat slaan voor een software bedrijf in de regio Veenendaal. Je gaat in deze functie aan de slag met het door ontwikkelen van bestaande producten en het ontwikkelen van nieuwe producten. Dit bedrijf ontwikkeld SaaS applicaties die zowel intern als extern gebruikt worden. Verder bestaat je functie uit: Het ontwikkelen en bouwen van webapplicatie, mobiele applicaties en websites vallen onder jouw verantwoordelijkheden; Werken met onder andere .NET, C#, HTML/CSS, Javascript en MSSQL/Oracle Databases; Hierin werk je samen met andere developers en

Bekijk vacature »

SQL Developer

Functie omschrijving We are looking for a dutch native speaker Jij gaat in deze functie aan de slag met uitdagende projecten en het creëren van maatwerk software, vooral middels SQL. Iedere klant/project is weer anders, maar dat maakt dit bedrijf en de functie erg uniek & uitdagend. Verder heb je de volgende taken: Ontwikkelen en ontwerpen van SQL databases. T-SQL wordt hierbij gebruikt als programmeer laag; Optimalisatie van query's, voor een verbeterde efficiency; Begeleiden van junior developers, mits je dit leuk vindt; Heb je meer interesse in een rol als consultant, dan is dit ook mogelijk. Je heb hier meer

Bekijk vacature »

Medior PHP Developer

Functie omschrijving We are looking for a dutch native speaker Wil jij als developer werken bij een interne organisatie en de eigen software verder helpen ontwikkelen? Lees dan snel verder! In deze functie ga je werken als PHP Developer en de interne software en applicaties verder ontwikkelen. In het kort houdt dit in: Je gaat de interne applicaties en software verder optimaliseren. Verder bouw je verschillende API's en koppelingen tussen systemen. Je gaat het CRM-systeem door middel van PHP verder ontwikkelen. Ook ga je collega's ondersteunen bij vragen over de software en applicaties. Bedrijfsprofiel Dit bedrijf is actief in het

Bekijk vacature »

Front end developer

Functie Binnen de functie van Front-end developer werk je mee aan uitdagende klantprojecten. In teamverband werk je aan de voorkant van onze state-of-the-art portaal oplossingen en apps. Dit alles gebeurt in een multidisciplinaire omgeving waarbij je de ruimte hebt om te sparren, je ideeën scherp te stellen, en waar je met de benodigde kennis en ervaring om je heen altijd terecht kunt bij je collega’s voor vragen en ondersteuning. Meestal werk je vanuit ons kantoor maar we bieden ook alle faciliteiten om thuis te kunnen werken. Voor sommige projecten ga je mee naar de klant, wellicht zelfs in het buitenland!

Bekijk vacature »

PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little TypeScript or other technologies that might be used. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing vanilla PHP code. Working with

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

22/12/2024 07:50:12
 
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.