Newsgroup: it.comp.java
Titolo: Dubbi interazione server-client...

Buona sera,
non ho ben chiara una piccola cosa...tipo, come posso far interagire piů
applet fra loro passando dal server?
Nel senso se volessi iniziare a creare dei semplici giochi che permettono a
piů utenti di giocare fra loro o anche realizzare delle chat...come vengono
strutturate?
Ok con la 
java.net
 mi permette di stabilire una connessione con un
server...passare dati e simili... (giusto?) Perň poi come avviene il resto?
La connessione deve essere effettuata ad un server...ma poi come viene
gestito l'azione di uno dei client? Tipo ho il gioco del filetto....io metto
il pallino in una casella....all'altro client come compare il pallino? C'č
un continuo refresh? Sul server cosa gira? C'č solo un database?
Nel caso di continuii refresh della schermata non si viene a creare quel
brutto effetto di semilampeggio (so che ha un nome particolare, ma non me lo
ricordo)?
Grazie
Byez
B@STI

 strutturate?
devi usare una tecnica chiamata "polling": cioč i client interrogano
periodicamente il server sul quale vengono salvate le mosse e le leggono
direttamente dal server. Potresti anche fare interagire direttamente i due
client, ma č molto piů oneroso in termini di codice da scrivere e non č
neanche molto sicuro.
Bye!
Alex

 Alex
grazie
byez
B@STI

 i salvataggi avvengono su db?
[CUT]
Si usa sempre il polling: immagina che casino se il server dovesse tenere
traccia di tutti i client collegati in quel momento e dovesse inviare info
personalizzate a ciascuno....
Con il polling invece lo stato attuale del gioco è sempre disponibile e chi
ne ha bisogno si va a prelevare i dati.
La visualizzazione e il refresh delle variabili di stato sono legate fino a
un certo punto.
Al limite se gestisci male il polling potresti avere il gioco che muove gli
avversari un po' a scatti ma il flickering (sfarfallio) non dipende da
quello. Per evitare gli "effetti strani" basta fare un repaint almeno ogni
50ms (ancora meglio 40ms o meno) in modo da avere 20-25 frame al secondo
come minimo.
Avrei bisogno di contattarti in privato,se ti va, perché ho bisogno di una
persona che mi dia una mano in questo settore (ovviamente a pagamento);
l'indirizzo email che usi per le news è valido?
Bye!
Alex.

 Alex.
byez
B@STI

 
Una tecnica che ho usato io per un progettino è quello di implementare 
le "callback" dal lato server. Ho usato una tecnologia RMI ed il 
principio è che mentre dal lato server viene creato l'RMI registry e le 
chiamate dal client verso il server (azioni del client da far girare sul 
server) si gestiscono normalmente, per far girare dei metodi sul client 
vengono preticamente registrati dei (scusami l'acronimo stupido) 
"server-lato-client". In pratica (se sei pratico di RMI non dovrebbe 
essere difficile altrimenti contattami pure che ti mando un esempio)
una volta stabilita la connessione con il server, quest'ultimo registra 
in una piccola classettina i dati sensibili del client + una 
cosettina... In pratica devi creare un oggetto remoto (vedi RMI 
tutorial) sul client, esportarlo (java.rmi.UnicastRemoteObject.exportObj 
ect(anObject);) e passarlo al server magari tramite un metodo del server 
in modo che quest'ultimo lo registri da qualche parte  (tipo una hashtable).
	Quando poi l'applicazione server avrà necessità di chiamare un metodo e 
farlo girare sul Client, (una callback appunto) tipo per dirgli lo stato 
di una pedina o un messaggio di uno dei giocatori, dovrà chiamare uno 
dei metodi (che tu avrai predisposto) su quell'oggettino che hai 
esportato ed associato ad un utente.... ed esso girerà sul lato 
client.... se tutto ti è chiaro allora spero di esserti stato utile e 
una accortezza. Nei metodi remoti del client quando devi aggiornare 
l'interfaccia grafica (sistemare una label o altro) le chiamate agli 
oggetti swing falli girare nel Thread degli eventi tramite il metodo 
statico EventQueue.invokeLater( new Runnable(...etc))), altrimenti 
rischi il blocco di Swing (su Win32 te la potresti cavare ma su Linux 
e/o Solaris è una garanzia), come se fosse richiamato dall'interno di un 
Thread.