Designabfrage zum Definieren neuer Ereignisse auf einer vorhandenen Reihe von Ereignissen für ein Socket -Protokoll

StackOverflow https://stackoverflow.com/questions/6317684

  •  26-10-2019
  •  | 
  •  

Frage

Ich habe ein Java -Server- und Client -Programm mit JBoss Netty geschrieben. Um einige Daten an den Remote -Client zu senden und Daten von ihnen zurück zu empfangen, habe ich Ereignisse und Handler für jedes Ereignis definiert. Auf dem Kabel befindet sich jedes Ereignis nur ein einzelner Byte -Header (Opcode), gefolgt von den Nachrichten -Bytes. Anfangs hatte ich nur TCP unterstützt und Ereignisse wie log_in, log_out, data_in, data_out usw. in meinem Programm definiert. Für zB

public static final int LOG_IN = 0x08;
public static final int LOG_OUT = 0x0a;

Dann habe ich mich auch entschlossen, UDP zu unterstützen, und endete mit Ereignissen wie Login_Ud, login_tcp, data_out_tcp oder data_out_udp usw., sodass der Ereignis basierend auf dem richtigen Ereignishandler das Ereignis erhalten und an den entsprechenden Socket und Remote -Port schreiben würde.

Wie Sie sehen können, ist das erste Problem, mit dem ich ausgesetzt bin, dass ich die Anzahl der definierten Ereignisse und Ereignishandler beim Hinzufügen von UDP fast verdoppelt habe. Gibt es einen besseren Weg, um sich diesem Szenario zu nähern?

Das zweite (geringfügige) Problem, mit dem ich ausgesetzt bin, ist, dass Ereignisse wie Data_out beim Schreiben von Server zum Client sinnvoll sind. Wenn Sie jedoch das gleiche Ereignis auf der Client -Seite erhalten, ist dies nicht sinnvoll, da es sich tatsächlich um eingehende Daten handelt Für den Kunden. Im Moment habe ich einen Decoder, der Data_out in Data_in übersetzt. Ist das der beste Ansatz?

War es hilfreich?

Lösung

Sie können das Werksmuster verwenden, um eine Verbindung auf der Grundlage des Typs Kanal zu erstellen, dh TCP oder UDP. Weitere Details müssen in diesem Fall einmal definieren

Wenn Sie data_out aufrufen, können Sie es als server_out aufrufen wie server_in

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top