Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    6

    applicazione client/server scambio messaggi

    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

    codice:
    outputStream.writeObject(messageObject);
    e dove outputStream è così definito:

    codice:
    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: applicazione client/server scambio messaggi

    Originariamente inviato da moriero
    quanto ho fatto è corretto??
    Sì, a patto che quel messageObject si riferisca ad un oggetto "serializzabile". E per essere un po' più sicuri, sarebbe meglio poi fare anche un flush() sullo stream.

    Originariamente inviato da moriero
    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?
    La "serializzazione" funziona in modo particolare: ha un sistema di "caching" interno tale per cui se scrivi successive volte lo stesso identico oggetto (e qui non conta il suo stato, se è cambiato o no, ma la sua "identità"), non viene serializzato di nuovo tutto lo stato ma viene scritto solo un "riferimento" secondo il protocollo della serializzazione.

    Morale: se usi semplicemente writeObject() e (ri)scrivi lo stesso oggetto cambiando solo il suo stato otterrai dei risultati spiacevoli/inaspettati!

    Se vuoi (ri)scrivere lo stesso oggetto che cambia solo di stato, devi usare writeUnshared().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    6

    Re: Re: applicazione client/server scambio messaggi

    Originariamente inviato da andbin
    Sì, a patto che quel messageObject si riferisca ad un oggetto "serializzabile". E per essere un po' più sicuri, sarebbe meglio poi fare anche un flush() sullo stream.
    si ho aggiunto la dichiarazione implements java.io.Serializable

    La "serializzazione" funziona in modo particolare: ha un sistema di "caching" interno tale per cui se scrivi successive volte lo stesso identico oggetto (e qui non conta il suo stato, se è cambiato o no, ma la sua "identità"), non viene serializzato di nuovo tutto lo stato ma viene scritto solo un "riferimento" secondo il protocollo della serializzazione.

    Morale: se usi semplicemente writeObject() e (ri)scrivi lo stesso oggetto cambiando solo il suo stato otterrai dei risultati spiacevoli/inaspettati!

    Se vuoi (ri)scrivere lo stesso oggetto che cambia solo di stato, devi usare writeUnshared().
    Perchè quando un oggetto è definito serializzabile gli viene associato un UID giusto???
    Io volevo modificare solo lo stato perchè quello che il client comunica al server sono solo
    interrogazioni al quale il server risponde...una volta che il server ha letto e risposto non ho interesse a ritrovarmi quei dati,e quindi non volevo istanziare nuovi oggetti per non avere memoria occupata inutilmente....è vero che per un programma così piccolo non sarà eccessiva
    ma visto che ci sono cerco di imparare il modo migliore per farlo
    Quindi alla fine mi conviene modificare lo stato e usare questa writeUnshared() ?? Tu che faresti?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: applicazione client/server scambio messaggi

    Originariamente inviato da moriero
    Perchè quando un oggetto è definito serializzabile gli viene associato un UID giusto???
    Il "protocollo" della serializzazione (documentato qui) specifica che quando si ri-scrive uno stesso oggetto già scritto in precedenza, viene scritto un "back-reference" che è composto da un byte di "marcatura" che indica il back-reference seguito da un int che è un "identificativo" che chiaramente ha senso solo tra le due parti ObjectOutputStream/ObjectInputStream.

    Se non vuoi il caching e il conseguente back-reference, usi appunto writeUnshared(). Tutto qui.

    Originariamente inviato da moriero
    Quindi alla fine mi conviene modificare lo stato e usare questa writeUnshared() ?? Tu che faresti?
    Sì, questo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    6
    ok ora provo...grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.