Newsgroup: it.comp.java
Titolo: Server concorrenti in Java .

Qualcuno ha informazioni su come implementare un server concorrente,
cioe' un server che invece di accettare connessioni e subito elaborarle
genera un nuovo thread per ogni nuova richiesta.
Se avete del codice di esempio vi saro' grato a vita !!!!
Ciao e grazie a chi mi rispondara'
Francesco
--
Posted from 
tlvsdy.vim.tlt.alcatel.it
 [151.98.8.244]
via Mailgate.ORG Server - 
http://www.mailgate.org

Se avete del codice di esempio vi saro' grato a vita !!!!
Ecco un possibile schema:
    la classe di processing
    class Processing implements Runnable {
        Socket controparte;
        public Processing(Socket controparte) {
            this.controparte = controparte;
        }
        public void run() {
            // esegue quanto occorra per gestire la richiesta
        }
    }
e nel tuo loop principale di servizio, avendo una ServerSocket ss
ad esempio:
        while(true) {
            Socket controparte = ss.accept();
            Runnable esegui = new Processing(controparte);
            new Thread(esegui).start();
        }
Se le richieste di servizi non ti arrivano via ServerSocket,
lo schema-base per il server multithreaded e' comunque
del tutto omologo (classe di elaborazione che implementa
Runnable, accetta i dettagli del servizio nel costruttore e
lo esegue nel metodo run(); creazione di una istanza di
questa classe, e di un nuovo thread cui passarla; start
dell'oggetto thread cosi' costruito).
Alex

Francesco
Ciao Francesco!
  Beh: codice disponibile non ne ho al momento (non ho ancora scritto
un server concorrente in Java... nemmeno uno iterattivo ora che ci
penso!) però direi che la classica tecnica utilizzata con gli altri
linguaggi di programmazione possa andare più che bene:
1. Crei una classe (quella che contiene il main) che non fa altro che
rimanere in attesa (accept()) su una particolare porta (vedi la classe
ServerSocket per maggiori dettagli a riguardo!).
2. Crei una seconda classe che implementa il Server vero e proprio.
Direi che la classe potrebbe tranquillamente estendere Thread (anche
se c'e' chi sostiene che farebbe meglio ad implementare Runnable: a te
la scelta).
3. Ad ogni connessione che viene effettuata sul socket crei una nuova
istanza della classe di cui al punto 2 e la fai partire con start()
dopo averla "informata" di quale socket utilizzare (quello che ti
restituisce la accept()).
Dopodichè ritorni ad attendete (accept()) sul socket mentre il thread
che hai appena creato dialoga con il client.
Vedo se riesco a scrivere qualche esempietto semplice ma non mi viene
in mente nulla che possa chiarire meglio di quanto ho esposto sopra...
se hai domande a proposito mandamele pure via e-mail!
Ci RiLeggiamo!!!
Matteo!!!

...
 Su alcune implementazioni della JVM il tutto potrebbe essere non
concorrente, visto che  politiche di scheduling time-slicing sono
auspicabili ma non obbligatorie (ad esempio JDK 1.6 Linux - Green
threads).
 Si può risolvere il problema aumentando la priorità del thread in
attesa o diminuire quella dei thread figli (Processing), visto che la
preemption è garantita (ma non è garantito che il processo a priorità
maggiore stia girando... sembra un controsenso, ma non lo è  :->  ).
Adam