2017-12-11 3 views
-1

Also habe ich einen Server mit netty geschrieben und ich habe nichts anderes damit geschrieben, also frage ich mich, ob meine Herangehensweise an die Pipeline korrekt ist.

Ich habe 2 Standard-Handler in Server und Client, ObjectEncoder und Decoder und ich dachte über eine neue Handler für jede Funktion, die ich auf meinem Server zum Beispiel habe ich einen UserAuthenticationHandler, UserActionHandler und jeder von ihnen behandelt unterschiedliche Pakete und Pässe sie zu entsprechenden Klassen.

Also dies ist einer der Ansatz, den ich in meinen Gedanken der andere ist ein Handler für jede Funktion, was bedeutet, ich muss einen großen Schalter schreiben, um alle von ihnen zu behandeln.
Ist es in Ordnung, den ersten Ansatz zu verwenden oder sollte ich mit dem zweiten bleiben?
Ist mein Handler-Design gut?

Beispiel erster Ansatz

public class UserAuthenticationHandler extends AbstractPacketHandler { 
    private User user; 

public UserAuthenticationHandler(User user, DatabaseConnection databaseConnection) { 
    this.user = user; 
    new UserAuthenticator(databaseConnection); 
} 

@Override 
protected void handlePacket(Packet packet) { 

    switch (packet.packetType){ 
     case "START_LOGIN": 
      UserAuthenticator.startLoginProcess(packet, user); 
    } 
} 

@Override 
public void channelActive(ChannelHandlerContext ctx) throws Exception { 
    super.channelActive(ctx); 
} 

public User getUser(){ 
    return user; 
} 

}

Zweiter Ansatz

Man stelle sich vor die erste, aber mit 50 + Schalter Fällen und groß wie die Hölle Konstruktor für jede Klasse.

+1

Bitte geben Sie uns Codebeispiele von dem, was Sie bisher versucht haben. So können wir Ihnen effektiver helfen. – Ivonet

+0

@ivonet Ich habe meinen aktuellen Ansatz hinzugefügt. – Bleo

Antwort

1

Im Allgemeinen würde ich empfehlen, verschiedene Handler zu haben, wenn es sinnvoll ist, da diese auf verschiedene Nachrichten wirken werden. Das sagte von dem, was du erklärt hast, scheint das nicht wirklich so zu sein. Ich denke, in Ihrem Fall sollten Sie nur den Decoder/Encoder und dann einen Handler haben, der an die richtige "Business Logic" -Schnittstelle Ihrer App versendet.

Verwandte Themen