Visualizzazione risultati 1 fino 6 di 6

Discussione: PseudoSocketIO - Le websocket approdano su altervista.

  1. #1
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito PseudoSocketIO - Le websocket approdano su altervista.

    https://github.com/ilmattodel93/PseudoSocketIO
    http://ilmattodel93.github.com/PseudoSocketIO/

    Vi è mai venuta voglia di programmare ad eventi una bella chat qui su altervista? Oppure una chat visuale che coinvolga tutti i visitatori e che gli permetta in tempo reale* oppure di programmare dei giochi multiplayer in HTML5 e hostarli su altervista?

    Ebbene PseudoSocketIO fa per voi!
    PseudoSocketIO è una piccola libreria da me scritta che implementa una architettura in stile websocket utilizzando ajax e comet :)

    Potrete quindi sfogarvi a sviluppare la vostra applicazione senza troppi problemi con le interazioni client-server :)

    Features:
    • API in stile websocket, in particolare SocketIO, con open, event, close
    • Multichanneling, che permette di joinare più channel differenti
    • Scambio di key tra client e server, che implementa una cifratura di base che evita di rubare l'id della connessione altrui
    • OpenSource
    • Possibilità di salvare valori associati al client $client->data


    Codice PHP:
    class Server extends PseudoSocketIO\Server{
    function
    on_open($client){
    $client->data = array('username' => 'guest'.rand(1234,9876));
    $client->save();
    $this->send(array('target' => 0, 'event' =>'message', 'data'=>array('username'=>'ChatBot','message'=>$client->data['username'].' joined')));
    }

    function
    on_event($client, $event){
    // Broadcast received value.
    $this->send(array('target' => 0, 'event' =>'message', 'data'=>array('username'=>$client->data['username'],'message'=>$event['data']['message'])));
    }

    function
    on_close($client){
    $this->send(array('target' => 0, 'event' =>'message', 'data'=>array('username'=>'ChatBot','message'=>$client->data['username'].' left (timeout)')));
    }
    }
    Pareri, domande, opinioni, migliorie? :)

    *delay di 1-2 secondi
    Ultima modifica di matt93 : 02-01-2013 alle ore 19.59.48

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Il progetto manca un po' di documentazione. Non ho ben capito l'architettura. C'è un js che ogni 2 secondi fa una richiesta al server e la tua libreria la fa sembrare una connessione persistente?


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito

    Sì, lo ho cominciato stamane e finito prima, mi devo mettere lì con le documentazioni xD

    L'architettura è piuttosto semplice, vengono effettuate delle richieste push al server (in futuro long polling) per ottenere i dati, mentre la libreria fa sembrare il tutto una connessione persistente proprio come dici tu.

    Non credo sia nulla di innovativo, ma volevo sapere se lo ritenevate utile :)

    EDIT: Pubblicata lo documentazione :) http://ilmattodel93.github.com/PseudoSocketIO/
    Ultima modifica di matt93 : 02-01-2013 alle ore 20.00.36

  4. #4
    Guest

    Predefinito

    Interessante! Una domanda sul long polling: è per caso una cosa simile a questa? ma non c'è comunque un timeout su AlterVista per ogni chiamata, un tempo massimo di completamento della risposta?

    Codice PHP:
    <?php

    header
    ('Content-type: text/html; charset=utf-8');

    $cnt = 0;
    while (
    true) {
    $cnt += 1;
    echo
    "cnt: $cnt<br>";
    ob_flush();
    flush();
    sleep(1);
    }

    ?>

  5. #5
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Citazione Originalmente inviato da matt93 Visualizza messaggio
    Non credo sia nulla di innovativo, ma volevo sapere se lo ritenevate utile :)
    Sicuramente può essere utile perché risparmi ad altri del lavoro.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  6. #6
    L'avatar di matt93
    matt93 non è connesso Utente
    Data registrazione
    01-09-2008
    Messaggi
    241

    Predefinito

    Citazione Originalmente inviato da WebRobotEvolution Visualizza messaggio
    Interessante! Una domanda sul long polling: è per caso una cosa simile a questa? ma non c'è comunque un timeout su AlterVista per ogni chiamata, un tempo massimo di completamento della risposta?

    Codice PHP:
    <?php

    header
    ('Content-type: text/html; charset=utf-8');

    $cnt = 0;
    while (
    true) {
    $cnt += 1;
    echo
    "cnt: $cnt<br>";
    ob_flush();
    flush();
    sleep(1);
    }

    ?>
    Esattamente. Su altervista un codice del genere viene eseguito per 15 secondi e poi cade nel max_execution time.Il trucco starà nel sostituire quel while(true) con un while($time_elapsed < 14) con time_elapsed pari a time()-time_started e time_started che viene settato a inizio esecuzione come time().

    In questo modo avremo dei micro-long polling lunghi come il max execution time, evitando quindi errori e warning per avere superato il tempo massimo di esecuzione. A questo punto il JS si accorgerà tramite un apposito callback del tipo {callback:"polling_done"} che si occuperà poi di richiamare di nuovo lo script del long polling :)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •