Domanda

Ho scritto un server Thrift in Java per approfittare di uno specifico pacchetto Java / biblioteca, ma io non sono un programmatore Java.

Il problema è; Sto vedendo un time-out per la prima chiamata RPC al server. richieste Subsequest vengono eseguiti senza problemi, ed i suoi clienti solo che interessano scritti in alcuni (ma essenziali) lingue.

Il mio pensiero attuale è che il server di volte-out sulla risposta, perché a prima richiesta deve caricare tutte le librerie necessarie per la richiesta. Alcune implementazioni client Thrift devono essere gestendo il time-out meglio di altri, possibilmente mantenendo la richiesta di aprire un po 'di più.

C'è un modo in Java per precaricare le librerie che sto usando quando ho avviare il file .jar, quindi non c'è un ritardo sulla prima richiesta?

Soluzione: ho ottenuto intorno al problema (e alcuni ulteriori quelli sollevati) aumentando il timeout da parte del cliente di risparmio (s). Tuttavia, ho implementato la risposta statica / Class.forName anche per aiutare le cose insieme, che funziona alla grande. Grazie!

È stato utile?

Soluzione

È possibile eseguire un carico prima che il server diventa vivo. Non hai specificato come si sta caricando il server, le classi, e ciò che l'ambiente è, ma si può approfittare del fatto che un inizializzatore statico della classe verrà eseguito quando la classe viene caricata. Quindi, se si sta eseguendo da un metodo "main", la classe potrebbe somigliare a questo

public class Foo {

   static {
     //this will be run when the class is loaded
     try { Class.forName("fully.qualified.class.name.that.i.want.to.Load"); }
     catch ...
   }

   public static void main (string args[])
   {
    //run my server...
   }
}

Altri suggerimenti

Una cosa che si potrebbe desiderare di provare sta scrivendo un semplice client all'interno del server Java stesso. Questo client non fa altro che richiamare un metodo nel server all'avvio, costringendo le classi da caricare. Dopo questo piccolo client ottiene un risultato (o callback), poi mette il server in un "accessibile dal mondo esterno" stato.

Suggerisco fingendo un collegamento appena prima di aprire il server. Che garantirà sarà stato eseguito che (la maggior parte) rilevante inizializzazione pigra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top