Sto lavorando su un'enorme applicazione e abbiamo avuto alcuni problemi seri riguardo alle prestazioni del software. Non voglio disturbarti con troppi dettagli, quindi in breve:
- in una JVM viene eseguita la GUI (JavaFX)
- in un'altra JVM esegue la logica
- le due JVM comunicano tra loro tramite socket (per trasmissioni veloci) e http
La logica-jvm esegue periodicamente (1/10) alcune analisi dei dati e crea una struttura contenente alcuni numeri e immagini (rgb, 640 * 480). Il gui deve visualizzare questi dati alla stessa velocità e visualizzare le immagini. Attualmente la GUI richiede 10 volte al secondo questi dati dalla logica jvm su http, mentre i dati stessi vengono inviati tramite una connessione socket. Questa circostanza è nata dall'idea di poter collegare più GUI a una logica. Ma come ha mostrato il tempo, non lo faremo. Inoltre, le prestazioni sono davvero pessime, non appena i dati (principalmente a causa di più immagini) diventano più grandi (250 MB). Sembra che il collo di bottiglia è, dove mettiamo i dati dell'immagine nel bytebuffer e l'invio. Come detto prima, probabilmente non avremo mai più gui - quindi perché non usare solo un jvm.
Che cosa parla della soluzione attuale:
- Possiamo impostare la priorità delle applicazioni in Windows. la logica deve davvero funzionare senza intoppi e viene data un'alta priorità. L'applicazione GUI dovrebbe anche funzionare senza problemi, ma a nessuno importa se salta un frame o due.
Inoltre la GUI ha alcune viste, in cui le proprietà (per semplicità SimpleObjectProperty) nella logica dovrebbero essere modificate. Cioè un campo di testo JavaFx deve essere associato bidirezionale a una proprietà SimpleString nella parte logica. Quindi aggiornare la stringa all'interno della logica modificherà il campo di testo e viceversa.
gui
TextField tf = new TextField();
tf.textProperty().bindBidirectional(observableOfLogic);
Spero che tu provi qualcosa per la situazione.
Ora finalmente desidero esprimere la mia domanda:
Qual è il miglior design per un simile problema?
Grazie mille in anticipo.