Quali sono i migliori modelli / progetti per lo sviluppo di API stateful?

5

Sto per implementare un'API per il mio server TCP / IP scritto in Java. In questo momento ho un metodo temporaneo che accetta una stringa, esegue un comando basato sulla stringa e restituisce una stringa fondamentalmente simile alla seguente.

public void communicate(BufferedReader in, PrintWriter out) {
    while(true) {
        out.println(handleCommand(in.readLine()));
    }
}

private String handleCommand(String command) {
    if (command.equals("command1") {
        // do stuff
        return "Command 1 executed";
    } else if (command.equals("command2") {
        // do some other stuff
        return "Command 2 executed";
    }
}

Voglio davvero fare qualcosa di più estensibile, intelligente e di stato, in modo da poter gestire comandi più complessi e di stato e senza che il metodo / classe si gonfia.

Come inizieresti?

Suggerimenti, idee o link per ulteriori letture sono i benvenuti.

    
posta Svante 22.02.2011 - 14:11
fonte

2 risposte

2

Suggerirei di utilizzare un'interfaccia, ad esempio:

interface Command {
   public boolean doCommand();
}

enum CommandNames {
   COMMAND1("COMMAND1"),
   COMMAND2("COMMAND2");

   // other enum stuff

   // Gets a command based on a name
   public static CommandNames getCommand(String name);
}

Utilizzo:

Map<CommandNames, Command> commands;

private String handleCommand(String command) {
   Command command = commands.get(CommandNames.getCommand(command));

   command.handleCommand();
}

Prima bozza, ma dovrebbe almeno darti qualche idea.

    
risposta data 22.02.2011 - 14:59
fonte
2

Il più semplice è thread-per-connection. Con flusso come:

while (true) {
    accept a connection ;
    create a thread to deal with the client ;
end while

Questo è abbastanza buono anche per traffico relativamente alto.

Per prestazioni estreme con traffico molto elevato, preferisci avere server event-driven / asincrono. Questi tendono ad essere più complicati, quindi in questo caso ti consiglierei di basare la tua soluzione su quella esistente, come JBoss Netty o Apache MINA . Solo che hai un'idea delle prestazioni qui, server basati su eventi che siamo progettati per combattere il problema C10K (oltre 10.000 connessioni client simultanee).

    
risposta data 22.02.2011 - 15:03
fonte

Leggi altre domande sui tag