Requisiti Java Desktop Application - I socket sono la scelta preferita?

1

Attualmente sto lavorando su un requisito per un'applicazione desktop - utilizzando Java

If for some reason the GUI crashes, it shouldn't affect the background process. Once the GUI is restarted - the execution status along with the log messages should be given back to GUI.

L'applicazione desktop è costruita per Windows e amp; ubuntu 12.04.

Secondo le mie conoscenze in Java, questo potrebbe essere ottenuto usando Socket. Mantenere la GUI come client ed eseguire codice di background in un server. (Ma ancora sto ancora cercando di capire come il server rimane attivo se la GUI va in crash, - Voglio dire se il server viene avviato dall'istanza della GUI in qualsiasi momento e se la GUI va in crash, anche il server è morto, bcz appartiene ancora alla stessa istanza JVM, giusto?)

La domanda si riduce a: come avviare un server (tcp) in un nuovo processo dall'istanza di gui. Qualcuno può far luce - come implementare questo requisito?

    
posta Jitendar 16.09.2014 - 12:09
fonte

2 risposte

2

Socket, RMI, Protocol Buffers, Thrift, CORBA, DCOM, ... il numero di sistemi RPC è lungo ed esteso. Tuttavia, hanno tutti un obiettivo simile: fornire un sistema per consentire a un processo client e un altro processo server di comunicare tra loro.

Oggi la migliore pratica possibile è quella di utilizzare un sistema di comunicazione standard, uno in cui è possibile cambiare il client con una tecnologia diversa e il server non avrà bisogno di alcuna modifica. Il sistema utilizzato da molte persone sono i servizi web. È ancora un'altra forma di comunicazione remota, ma se si implementa il server che lo utilizza, sarete in grado di scrivere un client basato sul web molto facilmente o di aprire il vostro server ad altri client usando un'API standard.

Se hai bisogno di velocità raw, un socket è il migliore, ma è di basso livello. Dovrai fare il protocollo (cioè i messaggi) che ti mandi. Non ho mai trovato che fosse un problema TBH, ma molte persone preferiscono un framework che faccia questo per voi - i buffer di protocollo possono farlo, oppure puoi andare ancora più in alto e usare qualcosa come RMI che ti legherà a Java e lo renderà leggermente più facile.

    
risposta data 18.10.2014 - 13:12
fonte
0

Il tuo problema può essere risolto se usi RMI in java.

RMI è Invocazione di metodi remota.

In questo modo puoi creare due applicazioni. Una per GUI e un altro server (dove esiste il tuo processo (funzioni) effettivo). La GUI può comunicare con il server tramite il metodo di chiamata con la stimolazione dei parametri, se necessario. Ma entrambe le applicazioni sono indipendenti l'una dall'altra. Per il tuo caso questo funzionerà. Perché se il GUI (client) si blocca, non succede nulla al Server poiché è indipendente dall'esecuzione del client. una volta riavviato il client, puoi trovare il server e continuare i lavori. Ma in caso di arresto anomalo del server, è necessario riavviare sia client che server. Queste applicazioni possono essere eseguite nella stessa JVM o JVM separate. Ad ogni modo è necessario utilizzare gli indirizzi IP per configurare la comunicazione. Posso darti una piccola app eseguibile (entrambe le app client e server) se vuoi.

Grazie.

    
risposta data 18.09.2014 - 05:37
fonte

Leggi altre domande sui tag