Sto creando un server di accesso per il mio client all'applicazione server.Autenticazione da server a server per client - Singola filettatura
Fondamentalmente ci sono 5 server e tutti questi server sono collegati a un server di accesso.
Il client può connettersi a uno qualsiasi di questi 5 server, ma è necessario autenticarsi con nome utente e password. L'autenticazione deve essere eseguita nel server di login e il server di login dovrebbe restituire una risposta al server effettivo che dovrebbe restituire la risposta al client.
Così la sua come quella:
client -> Server -> Login-Server -> Server -> Client (codice di risposta)
Ora, io sto usando Netty ed è NIO, non è filettatura per-client. Ora, per autenticarsi con NIO, dobbiamo aspettare che arrivi una risposta dal server di login, e che può richiedere un po 'di tempo e ritardare altri client che vogliono accedere, in realtà non si può semplicemente aspettare una risposta con NIO come quella . Così ho pensato a un'idea su come posso farlo funzionare. La mia idea è stata eseguire la richiesta su un thread diverso e avere un evento con il metodo onResponse(String key, int responseCode)
e quindi inserire il canale del cliente in una mappa con una chiave generata, in modo da poter sapere a chi appartiene la risposta. Quindi, quando effettuiamo l'autenticazione, inviamo la chiave e i dati dell'utente.
Ma ritengo che questo sia un brutto modo e che esiste un metodo più efficiente per farlo. Qualche idea?
AFAIK netty supporta il blocco di NIO con un thread per connessione. Nota il comportamento * predefinito * di NIO sta bloccando le operazioni e fino a poco tempo fa solo Socket supportava operazioni non bloccanti come opzione. –
In un ambiente con più server, verrà interrotto quando si utilizza map per mantenere i canali. – eg04lt3r
Solo un suggerimento, dal momento che hai chiesto modi migliori per farlo: se stai usando Java potresti voler cercare in websockets i.e. html 5 + http (s). Quindi si ottiene un thread per modello client con cui lavorare, l'autenticazione con la crittografia è trasparente per l'applicazione e si ottengono tutte le funzionalità di NIO senza l'implementazione del client finale. – MuffinMan