PDA

View Full Version : [JAVA] applicazione client/server scambio messaggi


moriero
11-06-2010, 08:55
Ciao a tutti, sto realizzando una piccola applicazione client/server in java
per un sistema di prenotazione.
In pratica ho immaginato che il client per inviare richieste per la prenotazione
invii al server un oggetto "messageObject" con settati i parametri scelti
dall'utente attraverso un interfaccia grafica.
per inviare i messaggio al server faccio una

outputStream.writeObject(messageObject);

e dove outputStream è così definito:
outputStream = new ObjectOutputStream(socket.getOutputStream());


quanto ho fatto è corretto??

Un'altra cosa ,è più corretto
1)istanziare un nuovo messageObject ogni volta che c'è una richiesta dal Client verso il server

oppure

2)modificare lo stato di messageObject con dei metodi setter,in modo da preparare il messaggio per la nuova richiesta e inviare il tutto?
Se è corretto il caso 2 anche il server può settare il messggio in modo da fornire una risposta al client oppure dovrà creare un nuovo messageObject?

Grazie

tylerdurden83
11-06-2010, 09:43
Premesso che secondo me sei perfettamente in linea, ti posso dire due o tre spunti interessanti.

1) Hai mai visto RMI? Invece di costruire un oggetto (che implementa serializable naturalmente) lato client, gestirti tu le socket per l'invio e la ricezione (ricordati che se il client crasha, alt+f4, gli stacchi la lan, il thread sul server che gestiva quella particolare comunicazione non se ne accorge, quindi dovresti implementare un sistema di "ping", ad es ogni tot tempo il server a sua volta manda un messaggio al client per verificare se c'è ancora e prima di fare la read della risposta setti un timeout su quell'ulteriore socket?) etc etc, con RMI puoi chiamare direttamente un metodo del server come se fosse locale. Quindi, metti che sul server hai doStuff(MessageObject messageObject) che chiami dal thread che gestisce la socket con client, una volta che il client ha inviato il messageObject, puoi chiamare doStuff(messageObject), metodo del server, direttamente dal client.

2) E' possibile una gestione della messaggistica tramite JMS? Anche questo ti semplifica notevolmente la parte di comunicazione client/server, socket e quant'altro, e ti assicuro che è estremamente facile da implementare.

FabryHw
11-06-2010, 13:13
Aggiungo che se si ipotizza di usare RMI, allora darei un'occhiata anche a Hessian (http://hessian.caucho.com/)

Facile quanto RMI, anzi forse di più perché non c'è da impostare Java Security ed è multipiattaforma.
Esempio io l'ho usato per invocare metodi remoti Java da un client C#.

L'unico lato negativo è che quasi tutti gli esempi che troverai richiedono un servlet container (se la tua applicazione server gira dentro un TomCat/JBoss/Glashfish sei già a posto).
Hessian si può usare anche senza ma diventa più complicato da gestire (e troverai pochi esempi che spiegano come), io alla fine per fare prima ho usato Jetty come servlet container embedded nella mia applicazione.