Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    477

    aggiornamento dati ogni secondo

    Scusate il titolo ma sono ignorante in materia!

    Sto creando un gioco (come materia d'esame) con flash da giocare online in cui bisogna far interagire il proprio personaggio con altri personaggi. Ho l'aiuto di un programmatore, ma siccome anche per lui è la prima volta che si presenta questo problema, ci chiediamo se sia possibile registrare in un database la posizione di ogni giocatore e restituirla immediatamente tramite php. Praticamente è possibile, ma sono i tempi ristrettissimi che ci lasciano perplessi.
    Premetto che avendo già lavorato insieme sappiamo come trasferire i dati da php a flash e viceversa (con l'uso di XML) la domanda è: c'è un modo più veloce o pratico per fare questo tipo di operazione?
    Immaginate di muovere il vostro personaggio e tutti gli altri utenti/giocatori connessi devono vedere i vostri spostamenti in tempo reale.

    Qualcuno sa darci qualche dritta? Secondo voi il php è l'unico metodo o c'è qualcosa di più adatto....che ne so, java?

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460
    Queste cose si fanno in memoria, non su database. Per fare qualcosa del genere dunque consiglio una bella servlet, non un sistema come PHP in cui il lifecycle di una applicazione inizia e termina con la richiesta HTTP.
    There are 10 types of people in the world - those who understand binary and those who don't.

  3. #3
    Esistono 3 tipi di connessioni a FLASH che io conosco, poi non so se nell'ultima versione (la 8) abbiamo deciso di farne ulteriori.

    loadVar (querystring/XML)
    FlashRemoting (amfphp)
    XMLsocket (protocollo personale/XML)

    La qualità della connessione è completamente diversa tra le varie soluzioni.

    LOADVAR
    Il loadVar è una richiesta HTTP ad un serverweb e quindi va alla stessa velocità di caricamento di una pagina web.... certo è, che i dati che vengono scaricati generalmente sono molto più piccoli: pochi byte al posto che diversi kb di HTML. Tuttavia se utilizzi un protocollo non personale per comunicare ma utilizzi XML otterrai delle pessime performance in termini di velocità.

    FLASHREMOTING
    Poi abbiamo Flashremoting che puoi usare solo se:
    1) installi un componente macromedia sul server
    2) installi una libreria PHP gratuita che puoi trovare al seguente indirizzo: http://www.amfphp.org/
    Il protocollo utilizzato se non erro è il NuSoap ed è molto veloce e potente, quindi otterrai delle prestazioni in termini di velocità davvero eccezionali.

    XMLSOCKET
    Infine abbiamo le XMLsocket (che di XML se vogliamo ben dirlo c'è ben poco)... infatti se prendi la riclassi le funzioni di lettura di questa classe (in flash) puoi tranquillamente scriverti un protocollo molto più veloce e semplice di XML.
    Questa soluzione NON puoi usarla con PHP, per far girare un sistema che utilizzi le XMLsocket devi per forza avere un server web che monopolizzi una socket del server.
    Grazie all'XMLsocket puoi connetterti ad un serverweb e rimanere in ascolto, in questo caso l'aggiornamento tra server-client è in tempo reale, infatti non servono ulteriori richieste... FLASH continuerà ad ascoltare quello che verrà scritto sulla socket fino alla disconnessione dal serverweb (e presumibilmente al termine del gioco).


    CONSIGLI e PARERI
    Se dovessi fare un gioco in php sceglierei flashremoting.
    Se dovessi fare un gioco in flash in tempo reale cercherei un buon programmatore C++, C# o JAVA per il serverweb e farei tutto con la XMLsocket();

    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    477
    Grazie mille Platone! Ora ho una visuale più "concreta"....non sapevo da dove partire. Espongo il problema al programmatore e vediamo che dice.


    P.S. Nel caso interessasse a qualcuno il gioco sarà open source, chiunque potrà scaricare i codici sorgente, modificarlo a piacere e ri-pubblicarlo

  5. #5
    Zippo ha scritto un messaggio il giorno 01-02-2006 20:04:
    Scusami se ti rompo ancora, ma è veramente importante dato che è per un esame. Da quel che mi è sembrato di capire te ne intendi abbastanza in materia, non è che potresti suggerirmi appena più approfonditamente la struttura del gioco?
    Io con l'action script posso dire di essere ad un buon livello, quindi lì non dovrebbero esserci problemi...ciò che mi è ancora 'oscuro' è la dinamica dei dati.

    In particolare non ho ben capito la frase che mi hai scritto: "...se prendi la riclassi le funzioni di lettura di questa classe (in flash) puoi tranquillamente scriverti un protocollo molto più veloce e semplice di XML."

    che significa riclassare le funzioni?
    Facendo come dici tu se non erro tutte le informazioni della partita vengono memorizzate dinamicamente con l'action script per essere poi lette e utilizzate immediatamente (per questo non c'è bisogno di XML)?
    Una cosa che ho dimenticato di dirti però è che questo gioco durerà giorni, non è "una partita e fine". Uno entra, si registra, crea il suo personaggio e ogni volta che accederà al gioco si ritroverà il suo personaggio con le caratteristiche salvate. Quindi queste info saranno salvate in un DB no? (ecco perchè insistevo sul DB) Altrimenti come si potrebbe fare?

    La parte di programmazione (Java, C++ o altro) in questo tipo di struttura a che serve?

    Giuro che una volta capito in che direzione muovermi non ti disturbo più!
    Grazie ancora.
    Con l'oggetto XMLsocket puoi utilizzare le funzioni standard che sono rese disponibili dall'oggetto, oppure puoi creare delle nuove funzioni sovrascrivendo gli eventi.

    Ad esempio puoi fare delle cose del genere:

    //spero si scriva così, non ho voglia di riaprire la guida per correggere gli errori di sintassi
    codice:
    function myOnConnect (connected) {
      if(connected) {
         trace("connesso");
         //qui tutte le funzioni che ritieni opportuno eseguire
         //dopo la connessione (tipicamente funzioni di inizializzazione)
      } else trace("connessione fallita");
    }
    function myOnClose () {
      trace("ci siamo disconnessi!");
      //inserisci qui tutte le funzioni che ritieni opportune
      //dopo la disconnessione
    }
    function myOnData (incoming_data) {
      trace("è arrivato un nuovo messaggio dal server: "+incoming_data.toString());
      //funzioni di analisi del messaggio / protocollo
      //scritte personalmente
    }
    
    
    objXMLSocket           = new XMLSocket();
    #SOVRASCRIVIAMO GLI EVENTI onConnect, onClose, onXML
    objXMLSocket.onConnect = myOnConnect;
    objXMLSocket.onClose   = myOnClose;
    objXMLSocket.onData    = myOnData;
    Cosa succede dopo che abbiamo riclassato (sarebbe più corretto dire riscritto) gli eventi?
    Semplicemente intercettiamo l'evento XML prima che accada, infatti normalmente alla ricezione dei dati, Flash automaticamente utilizza la funzione associata all'evento onXML.

    -> DATI IN ARRIVO -> onData () -> onXML()

    Riclassando onData... l'evento onXML non avrà mai essere.
    Quindi non dovrai utilizzare il protocollo di comunicazione in XML ma potrai utilizzare un tuo protocollo di comunicazione personale.

    Ad esempio, ti consiglio ad esempio di utilizzare un TAG di separazione dati, così puoi ottenere tutti i dati utilizzando una funzione di SPLIT e puoi compilare i messaggi semplicemente con funzioni di IMPLODE.

    un esempio di protocollo utilizzando il separatore TILDE:
    codice:
    ID_MESSAGGIO~ID_AZIONE_DA_INTRAPRENDERE_SUL_CLIENT~ARGOMENTO1~ARGOMENTO2....
    con un protocollo del genere puoi inviare e ricevere dati moltoooooooooooooo più velocemente e questo perchè non c'è codice ridondante XML.

  6. #6
    Una cosa che ho dimenticato di dirti però è che questo gioco durerà giorni, non è "una partita e fine". Uno entra, si registra, crea il suo personaggio e ogni volta che accederà al gioco si ritroverà il suo personaggio con le caratteristiche salvate. Quindi queste info saranno salvate in un DB no? (ecco perchè insistevo sul DB) Altrimenti come si potrebbe fare?

    La parte di programmazione (Java, C++ o altro) in questo tipo di struttura a che serve?

    Giuro che una volta capito in che direzione muovermi non ti disturbo più!
    Grazie ancora.
    In tutti i giochi CLIENT -> SERVER tutto deve essere deciso dal server altrimenti si apre la possibilità che un utente possa riprogrammare il client per alterare i risultati delle proprie azioni ed inviare al server direttamente i risultati positivi.
    Quindi il client altro non deve essere che:
    - un visualizzatore dell'output
    - un interfaccia di decisionale di input

    Il server invece deve:
    - processare gli input inviati e decidere che effetto avranno le azioni (sull'utente e sugli altri utenti)
    - inviare lo stato attuale del gioco a tutti i client.

    Pensa al BROWSER che utilizzi per visualizzare internet... se potessi modificare il risultato delle tue azioni dal CLIENT saresti in grado di modificare e distruggere i sitiWEB... invece il processo forzato di passare per il server ti blocca. Su un browser puoi pasticciare le pagine salvate... ma non puoi alterare le variaibli in remoto.

    BROWSER -> RICHIESTA HTTP -> SERVER -> PROCESSO SERVER (decisioni) -> RISPOSTA AL CLIENT

    Decisioni solo lato CLIENT sono fattibili anche per un sitoweb, basta che il programmatore inserisca SOLO protezioni Javascript (script lato client) dentro al suo sitoweb.... però chiunque potrebbe disabilitarle e inviare le variabili che desidera al SERVER, che le riceverà senza alcuna protezione!!! Per questo motivo tutte le decisioni e tutti i processi devono stare lato server.

    Sempre lato server c'è bisogno di un database che salvi lo stato attuale delle cose, cosicchè alla riconessione di un utente tu possa rinviargli i dati per aggiornarlo sui cambiamenti intercorsi.

    Spero di esserti stato di aiuto.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    477
    Mi sei d'aiuto eccome!

    La parte di action script l'ho capita, avevo immaginato una cosa simile.

    Ora ti faccio l'esempio della posizione di ogni giocatore online:
    se devo vedere in tempo reale i movimenti degli altri personaggi come faccio?
    Vediamo se ho capito...
    Un utente quando si logga riceverà il numero di giocatori online (e relativo id per identificarli) poi attraverso le XMLsocket riceverà costantemente coordinate x e y di ogni utente e flash (con opportuni script) utilizzerà questi dati per farti vedere l'utente nella posizione attuale, giusto?
    Domanda: ogni swf utilizzato dagli utenti, dove e come invierà ad esempio le coordinate x e y per passarle agli altri e come recupererà quelle degli altri?

    Mi hai parlato di C++ o Java....dove vengono utilizzati?

  8. #8
    Uno script di posizione dovrebbe funzionare grosso modo così.


    INIZIALIZZAZIONE
    CLIENT -> invia pass di accesso
    SERVER -> accetta la sessione, introduce il giocatore e sceglie quali utenti sono abbastanza prossimi perchè possano essere spediti come giocanti al client.
    CLIENT -> riceve il messaggio di benvenuto
    CLIENT -> inizializza la mappa
    CLIENT -> attiva la visualizzazione di ogni utente segnalato

    ...


    ROUTINE DI AGGIORNAMENTO
    SERVER -> invio messaggio periodico di aggiornamento posizionamento o ingresso di nuovi client sul network
    CLIENT -> aggiorna la posizione e crea i nuovi utenti
    ....


    C++ e Java ti servono per costruire il SERVER.
    PHP non è in grado di mantenere una SOCKET aperta per inviare dati.
    PHP sa gestire le socket aprendole e richiudendole al termine dello script. Ma poichè funziona a sollecitazioni HTTP al termine della richiesta la pagina PHP termina il codice cmq e alla fine dell'esecuzione dello script si disconnette e chiude la porta anche se la lasci aperta.
    Per questo motivo ti serve un linguaggio di programmazione che ti permetta di sviluppare un server démone (che presidi la socket) e che trasmetta gli aggiornamenti senza essere interrogato.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    477
    Ok, grazie.
    Se avrò ancora bisogno (cosa assai probabile) mi farò vivo di nuovo.


  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    477
    Rieccomi qua...
    io e il programmatore stiamo facendo le prime prove di connessione al server con flash. Il problema è che quando invio user e password dovrei inviare:

    user (e premere invio)
    password ( e premere invio)

    come possiamo dire "premi invio" al server??? :master:

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.