Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    Io ti consiglio di operare generando dei processi, gestire un server senza processi e in possibile in quanto puo svolgere una connessione alla volta!

    Ma questo dipende dalle tue esigenze e dalla tua voglia di andare a leggerti un po di documentazione sulla programmazione di rete, che non e per niente banale!


    bye bye

  2. #12
    Bhè, io penso di poter fare questo server con un solo processo.

    Ho dovuto creare un nuovo thread a semaforo che verifica se i client hanno la porta da loro indicata, aperta a ricevere.

    Ho trovato una guida su internet sui socket generale e diceva di creare due processi, uno per ricevere e uno per sendare...veramente molto difficile da progettare ma fattibile.

    Per ora il server gira solo su Win32 ma mi preparo ad un versione unix molto presto.

    Ho risparmiato tempo, ed invece di impazzire con le classi in perl per gestire le 10.000 variabili, ho deciso di salvare tutto in mysql ed ora come ora giricchi bene.
    Per ora permette di eseguire il login e accetta una sola connessione per host.
    Riconosce quanto uno socket in lista si disconnette e ne cancella i dati.
    Le connessione tra client e server sono compresse sfruttando il SEMPLICISSIMO modulo Compress::Zlib che è potentissimo.
    Per comprimere un pacchetto prima di spedirlo basta richiamare la funzione passandogli i dati e lui li ritorna compressi. In questo modo spero di risparmiare molto sulla banda.

    Come gestione della RAM andiamo peggio. Mi ricordo che l'ultimo script in perl, in meno di 2 minuti dalla sua apertura, prendeva 40MB di memoria <_<
    Anche se ora ho provato a fare diverse connessioni e non usava neanche 1% del processore, sembrava un processo morto. XD

    Bhè, ora che questo script sta venendo su dopo molti fallimenti, sono abbastanza contento, forse si era capito da come ho scritto il msg ^^

    Vabbè, vado a continuare sto script.

    PS:
    Ho trovato il modo per distribuire i programmi con codice sorgente anche per chi non ha l'interprete perl installato.
    Forse può risultare utile.
    Allora, si crea una directory inserendo i file che sono nell'interprete perl di activestate. Nella stessa directory mettiamo un file SETUP.exe che esegue il comando "perl nomescript.pl".
    Mettiamo nella cartella anche lo script.
    Eventuali moduli hanno bisogno di vari passaggi.

    Con winrar generaimo un autoestraente che non mostra nessuna finestra ed estrae i file nella directory temporanea ed esegue il file SETUP.exe che eseguirà il nostro script perl. XD
    E funziona....assicurato.
    In questo modo si può non usare i vari compilatori che nella maggior parte delle volte funzionano male (perl2exe).


    Spero sia utile....


    Ciao ciao!

  3. #13
    Con un solo precesso accettare piu' connessioni contemporaneamente? scusa la mia titubanza ma lo vedo impossibile

    bye

  4. #14
    No guarda, con IO::Select è molto semplice. Ti spego anche come.

    questo che segue è un esempio preso dalla guida:

    codice:
       use IO::Select;
        use IO::Socket;
    $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
        $sel = new IO::Select( $lsn );
    
    while(@ready = $sel->can_read) {
            foreach $fh (@ready) {
                if($fh == $lsn) {
                    # Create a new socket
                    $new = $lsn->accept;
                    $sel->add($new);
                }
                else {
                    # Process socket
                    # Maybe we have finished with the socket
                    $sel->remove($fh);
                    $fh->close;
                }
            }
        }
    In poche parole, se richiedono una nuova connessione, l'oggetto rilasciato da can_read è uguale a quella creata per lo sock del server. Se è differente è un client che si era precedentemente connesso e quindi risolvo le sue richieste.
    Non è così semplice gestire più connessioni, però il meccanismo è quello.
    In questo modo se non ricevi nulla, non usi neanche risorse inutilmente.

    IO::Select mi ha salvato veramente la vita.
    Altrimenti a quest'ora serei ancora a forkare per ogni connessione nuova che ricevevo, e non è bello vedere la RAM che diminuisce piano piano (veloce veloce).

    Stacco perchè ho molto sonno.
    Ciao! ^^

  5. #15
    E con questa soluzioni risparmi sulla ram?

    Pero' oggi ho imparato una nuova cosa grazie a te! Anche e ancora preferisco fra i server di rete con le fork(), forse xke quelli li so gestire!!!


    byr

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 © 2026 vBulletin Solutions, Inc. All rights reserved.