Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Array multidimensionale mappa browsergame

    Ciao a tutti!
    Sto sviluppando un browsergame e mi sono trovato davanti un problema quando, dopo le prime prove, ho cominciato a creare una struttura che ospitasse una mappa di dimensioni adatte ad un discreto numero di utenti.
    Il tutto è gestito tramite un demone php e uno scambio di socket tra server e client, questo per far sì di avere i dati in una serie di matrici anziché dover fare query su DB per ogni richiesta, per ovvie motivazioni. Di conseguenza tutti i dati sono immagazzinati nella ram e sempre accessibili.
    Il problema si è presentato quando questa matrice ha cominciato ad ospitare una mappa consistente: circa 7.000.000 di chiavi. So che può sembrare un numero esagerato, ma secondo i conti, a livello di giocabilità, non sono poi così tanti
    Facendo così il server richiede diversi GB di memoria solo per creare la mappa. Si è pensato ovviamente di fare un a mappa che si riempisse gradualmente e quindi evitare di occupare questo spazio anche a mappa vuota, però il dubbio è di stare facendo la struttura in modo sbagliato, o che magari ce ne fosse uno migliore...

    codice:
    $x=1;
    $y=1;
    for($z=1; $z<7372800;$z++){
        if($x>3840){$x=1;$y++;}
        $mat = rand(12,19);
        $quantita = rand(1, 10);
        $MAPPA[$x.'-'.$y] = array(
                                'materiali'=>array(
                                        'nome'=>$mat,
                                        'quantita'=>($quantita/5)
                                 )
                            );
        $x++;
    }

  2. #2
    al singolo client non penso interessi TUTTA la mappa, ma al più la mappa del punto di dove si trova più eventualmente qualcosa dei punti limitrofi no? Avere tutta la mappa in cache mi pare una follia (per i problemi di ram che dici), dovresti fare caching su file ma cmq lo script php andrebbe a caricarsi tutta una mappa da 7milioni di chiavi ogni volta... rivedete la struttura di questa mappa, direi db più cache su file dei risultati delle query (che immagino non dipendano dal client che le ha fatte? o si?)
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Abbiamo evitato di usare il db per ridurre il carico di operazioni del server, per evitare di fargli fare troppe query. Essendo la mappa molto grande e dovendo accedere alle informazioni molto spesso fare query ogni volta non rende il tutto molto lento? A parte il client il problema si pone ancora prima, sulla creazione della mappa lato server. Abbiamo visto che creando un array lineare con un solo carattere ad ogni indice, per quei circa 7.000.000 di indici pesa circa 1G, facendo invece una stringa di 35.000.000 di caratteri (coordinate e caratteri di split) pesa 45M. E' normale che un array richieda così tante risorse in più?

  4. #4
    il server è gestito da voi ? Immagino di si visto che fate girare un demone in php...
    Tenendo i dati in ram se si dovesse riavviare il server, perdereste tutta la mappa.

    Php, secondo me, per un demone di questo tipo non è la tecnologia giusta. Potreste creare la mappa e far svolgere il lavoro ad un db ad alte prestazioni che tiene i dati in ram. Oppure creare un demone con node.js o python che "mangiano" molta meno ram.
    Php (fino alla 5) soffre da sempre di un consumo di ram alto rispetto ai dati che deve elaborare. Php 7, pubblicato recentemente, ha portato ad un deciso miglioramento in velocità di elaborazione e di consumo di ram.
    Ultima modifica di W Thunderbird; 20-12-2015 a 12:02

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    io proverei soluzioni alternative, tipo Redis, per tenere i dati in una sorta di cache

  6. #6
    Grazie a tutti, alla fine abbiamo optato per un db in mongodb e un demone nodejs e sembra che sia tutto risolto! Grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.