Ich erstelle einen Login-Server für meine Client-Server-Anwendung.Server-Server-Authentifizierung für Client - Single-Thread
Grundsätzlich gibt es 5 Server, und alle diese Server sind mit einem Login-Server verbunden.
Der Client kann sich mit einem dieser 5 Server verbinden, muss sich jedoch mit Benutzernamen und einem Passwort authentifizieren. Die Authentifizierung sollte auf dem Anmeldeserver erfolgen, und der Anmeldeserver sollte eine Antwort an den tatsächlichen Server zurückgeben, der die Antwort an den Client zurückgeben soll.
So sein wie folgt aus:
Client -> Server -> Login-Server -> Server -> Client (Antwortcode)
Nun, ich Netty verwende und es ist NIO, es ist nicht thread- pro Kunde. Um nun mit NIO zu authentifizieren, müssen wir auf eine Antwort warten, die vom Login-Server kommt, und das kann eine Weile dauern und andere Clients, die sich anmelden wollen, verzögern. Tatsächlich kann man nicht einfach mit NIO auf eine Antwort warten . Also dachte ich über eine Idee nach, wie ich es zum Laufen bringen kann. Meine Idee wurde die Anfrage auf einem anderen Thread ausgeführt und ein Ereignis mit onResponse(String key, int responseCode)
Methode und dann den Client-Kanal in einer Karte mit einem generierten Schlüssel, so dass wir wissen, wem die Antwort gehört. Wenn wir uns authentifizieren, senden wir den Schlüssel und die Benutzerdaten.
Aber ich fühle, dass dies ein schlechter Weg ist und es gibt eine effizientere Methode, dies zu tun. Irgendwelche Ideen?
AFAIK Netty unterstützt die Blockierung von NIO mit einem Thread pro Verbindung. Beachten Sie, dass das * Standard * -Verhalten von NIO blockierende Operationen ist und bis vor kurzem nur Sockets nicht-blockierende Operationen als Option unterstützt hat. –
In einer Multi-Server-Umgebung wird es unterbrochen, wenn die Karte verwendet wird, um Kanäle zu behalten. – eg04lt3r
Nur ein Vorschlag, da Sie nach besseren Möglichkeiten gefragt haben, dies zu tun - wenn Sie Java verwenden, können Sie in Websockets suchen, z. B. HTML 5 + http (s). Dann erhalten Sie einen Thread pro Client-Modell, mit dem Sie arbeiten können. Die Authentifizierung mit Verschlüsselung ist für Ihre Anwendung transparent und Sie erhalten alle Funktionen von NIO, ohne dass ein End-Client bereitgestellt werden muss. – MuffinMan