Newsgroup: it.comp.java
Titolo: CHAT, come si fanno?

salve, qualcuno di voi sa spiegarmi il funzionamento delle chat? In
rete ne vedo tantissime, e vorrei farne una anche per il mio sito.....
come si fanno? Grazie a chiunque leggerà questo messaggio
Potete rispondermi anche via e-mail:
mart...@etruria.net

Hey, baby!
Io sono il MAESTRO delle chat in java...
scherzo.
Ne ho scritta una che non funziona tanto bene. Piu' che altro perche' il
java (ricorda: write once, run anywhere) lavora bene sulle socket di
Windows e HP-UX ma non su quelle di System V, Linux e Solaris.
Ecco che cosa ti serve:
a) un Server
b) un Client.
a) Il Server. Il Server e' molto stupido, non e' una applet ma una
applicazione. Tutto quello che fa e' di mettersi ad ascoltare su una porta
specifica del suo host. Non appena qualcuno chiede di connettersi lui crea
la connessione e la inserisce nella lista delle connessioni. Ogni volta
che riceve una Stringa dalla socket (la porta, per intenderci) la
rispedisce indietro a tutti gli altri. Se leggi la documentazione del jdk
alla voce "socket" e "serverSocket" troverai le informazioni necessarie.
b) I client sono invece delle applet (cosi' le puoi inserire in una bella
pagina web) e devono contenere come minimo un TextArea con tutte le
stringhe in arrivo, un InputText per le stringhe in uscita e i bottoni per
inviare i dati o scollegarsi.
Non puo' pero' una persona qualunque crearsi una chat. Il server deve
essere in esecuzione sull'host delle pagine contenenti le applet. Se hai
la possibilita' di farlo, OK, ci sei, se invece sei ospite presso qualche
provider (o posti tipo Geocities) allora devi parlare con i "padroni" (e
forse mettere mano al portafogli).
Oltremodo, visto che la socket e' un numero (di quattro e piu' cifre) devi
sempre prevedere che la porta a cui sei solito connettere il tuo Server
possa essere occupata (vedi la Legge di Murphy). A 'sto punto ti serve una
bella CGI che lanci il Server, gli trovi una porta libera, formatti una
pagina html contenente i tag per indicare alla applet la porta ove si
trova il suo server.
Chiaro come la pece?
Comunque fai una bella ricerca su Infoseek specificando "chat java source
code", troverai milioni di soluzioni.
Skunk wrote:

--
Alexis Paul Bertolini
- PhD student in Computer Science at Milan University, Italy
- Managing director of Warehouse Creations
- Developer of Java applications, Web services, Network Databases
- Teacher of English as a foreign language

...


 alla voce "socket" e "serverSocket" troverai le informazioni necessarie.
Uno dei bug riconosciuti della JVM Sun (e per quel che ne so, anche delle
altre), e' quello di *non* rilasciare al sistema operativo la memoria allocata;
in altri termini, il garbage collector colleziona si' gli oggetti ..scaduti? e
rende disponibile la memoria alla JVM... ma se questa non la usa,  essa *non*
viene rilasciata comunque al sistema!
Il risultato e' che un'applicazione 'daemon' (o server che dir si voglia), dopo
un certo periodo di funzionamento, tendera' ad occupare *tutta* la memoria
del sistema, portando ad un hang o a pesanti malfunzionamenti da trashing.
Quindi, all'occhio: se fate un server in Java.. prevedete un bel kill&restart
periodico nel vostro cronfile!
Saluti e auguri,
    CS
--
Cristiano Sadun - Software Engineering and Consulting
***********Remove NOSPAM from address to reply***********
*********************************************************
"God is Real - unless declared Integer"

 viene rilasciata comunque al sistema!
Non ne sono proprio convinto...
Quello che ci si dimentica e' di eliminare tutti gli oggetti legati alla singola
connessione (stack delle stringhe in I/O, posizione nel vettore delle
connessioni...)
Osservando il Server java al lavoro con il Top di Unix, ho visto che il MIO server
non cresce col tempo. Cresce, ovviamente, man mano che gli utenti si collegano, ma
si stabilisce su un valore medio una volta che questi iniziano a disconnettersi e
riconnettersi.
Ha ragione a non fidarti del garbage collector, ma anziche' fare un kill cosi'
distruttivo, basta essere oculati nel caso di una connessionee terminata o persa.
Per ogni oggetto in questione basta fare:
if (oggetto!=null) { dispose(oggetto);}
(forse la sintassi non e' corretta, ma il messaggio e' quello).
Grazie dell'avvertimento. Non mi ha toccato, e comunque cosi' come e' implementata
la CGI che avvia il server, la vita media del server e' di una decina (al massimo)
di connessioni.
Ciao e buon anno!
