Salve vorrei chiedervi un parere , secondo voi in un applicazione client /server in java, dal punto di vista del client è più oneroso aprire ogni volta una connessione o tenere una connessione aperta?
Stessa domanda dal punto di vista del server.
Salve vorrei chiedervi un parere , secondo voi in un applicazione client /server in java, dal punto di vista del client è più oneroso aprire ogni volta una connessione o tenere una connessione aperta?
Stessa domanda dal punto di vista del server.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ci sn 20,30 client e un server multithread. I client devono loggarsi, poi devono scaricare delle informazioni dal server, ed è possibile ma non certo che debbano inviarne altre durante il giorno, e richiederne altre al server.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
capito ma in generale cosa è più oneroso?
La classe ClientConnection, implementa un oggetto che permette di effettuare richieste al server, poichè questo oggetto deve essere disponibile in più classi, secondo voi è fattibile una cosa simile:
da renderlo una specie di variabile globalecodice:public class GestoreConnessione { public static final ClientConnection connessione=new ClientConnection(); }
In generale, se vuoi avere un oggetto "singolo" accessibile da qualunque classe, c'è il pattern "singleton" che serve apposta per questo.
Avere un campo pubblico come quello mostrato da te, no, generalmente non è la cosa migliore.
Ci potrebbero essere altri "design" che si adattano meglio al tuo caso ma bisognerebbe vedere chi/quanti usano ClientConnection e cosa fa e ci devi fare con quel ClientConnection. Ah, precisa cosa è questa ClientConnection (quale framework/libreria).
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ClientConnection è una classe scritta da me, che ha un campo socket che permette di gestire la connessione col server. un metodo connect che ti fa collegare al server, un metodo download, che scarica informazioni dal server, un metodo insert che invia la server delle informazioni da inserire nel db e cosi via.. il fatto è che ciascuno di questi metodi può anche essere utilizzato in classi diverse, considerando che il software ha un interfaccia grafica .
Ecco il codice
COnsidera che non è completo e che ci sono degli errori! E' piuttosto per darti un' idea.codice:package jcallremember.client; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.sql.ResultSet; /** * * Questa Classe implementa una connessione al server */ public class ClientConnection { private Socket conn; private InetAddress address; private final int serverPort=40000; /** * Invia al server le informazioni di login e si connette * @param login * @throws java.net.ConnectException * @throws UnknownHostException * @throws IOException */ public void connect(Credenziali login) throws java.net.ConnectException, UnknownHostException, IOException{ this.address=InetAddress.getLocalHost(); this.conn=new Socket(address,this.serverPort); Boolean isConnect; OutputStream os = conn.getOutputStream(); ObjectOutputStream obs = new ObjectOutputStream(os); obs.writeObject(login); InputStream is = conn.getInputStream(); ObjectInputStream ois = new ObjectInputStream(is); isConnect = ois.readBoolean(); if(!isConnect){ throw new java.net.ConnectException("Username o Password" + " inesatte!"); } } public void connect public ResultSet downloadImpegniDelGiorno(){ String query="Select * from Cliente where "; return null; } }
Il metodo connect è perfettamente funzionante.
Sinceramente però non capisco come applicare a questa classe il pattern singleton !
Ultima modifica di linux_r; 08-04-2014 a 17:48
Ok.
Al massimo potrebbe essere "singleton" la classe GestoreConnessione .... non ClientConnection.
ClientConnection mi pare più sensato che sia una normale classe, con metodi di istanza che forniscono le "primitive" del tuo protocollo di comunicazione, nascondendo i dettagli tecnici interni.
Intendi interfaccia Swing? Allora considera anche tutte le implicazioni sul threading in Swing, ovvero il networking non dovrebbe essere fatto nel contesto del Event Dispatch Thread ma in un thread a parte (con quello che ne comporta).
P.S. quando scrivi qualunque cosa su socket, es. con writeObject, ricordati sempre di fare un bel flush() !
P.S. 2: e comunque non è detto che il concetto di singleton sia appropriato nel tuo caso. Bisognerebbe capire/vedere di più di quanto devi fare.
Ultima modifica di andbin; 08-04-2014 a 18:08
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet