fb
WSO2 5 Minuten

TCP-Socket-Kommunikation mit WSO2 ESB

Vinay Babu Yella
Vinay Babu Yella
Solution Architect
Blog 5 1
Scrollen
Blog-5-1

Sockets ermöglichen die Kommunikation zwischen Computern in einem Netzwerk. Immer dann, wenn ein Client-Computer mit einem Server kommunizieren muss (z.B. wenn der Browser des Clients eine Webseite aus dem Internet anfordert), wird ein Socket geöffnet, der zur Übertragung von Informationen zwischen Client und Server dient. Im Allgemeinen beziehen sich Sockets auf das Internet-Protokoll (IP) zur Weiterleitung von Datenpaketen über Netzwerkgrenzen hinweg. TCP (Transmission Control Protocol) und UDP (User Datagram Protocol) sind weit verbreitete Protokolle für Eins-zu-eins-Verbindungen zwischen zwei Knoten in einem Netzwerk. Das TCP-Protokoll gewährleistet, dass der Empfänger die Pakete in der Reihenfolge empfängt, in der sie gesendet werden, ist aber relativ langsam und eignet sich daher für Apps, die eine höhere Nachrichten-Zuverlässigkeit erfordern. UDP ist schneller und garantiert nicht, dass die gesendeten Nachrichten oder Pakete überhaupt ankommen. UDP wird verwendet, wenn eine hohe Geschwindigkeit erwünscht ist und keine Fehlerbehebung erforderlich ist. So wird UDP beispielsweise häufig für Live-Übertragungen und Online-Spiele verwendet. Für diesen Blog werden wir uns nur auf TCP-Sockets und insbesondere auf die TCP-Socket-Kommunikation mit dem WSO2 ESB konzentrieren.

TCP-Sockets

Das TCP-Socket-Protokoll ermöglicht es, eine kontinuierliche Vollduplex-Verbindung mit dem Strom von Bytes zwischen einem Client und einem Server herzustellen. Sockets werden mit einer Socket-Adresse assoziiert, die aus einer IP-Adresse und einer Port-Nummer besteht.

Blog-5-2

Zwischen Client und Server muss eine TCP-Socket-Sitzung erstellt werden, um die Kommunikation in Form eines Bytestroms in Gang zu setzen. Beim Aufbau einer TCP-Socket-Sitzung werden Socket-Streams für eingehenden und ausgehenden Verkehr zwischen einem Client und einem Server erstellt.

TCP-Transport im WSO2-ESB

Der TCP-Transport im WSO2 ESB ermöglicht dir das Senden und Empfangen von SOAP-Nachrichten über den TCP an den TCP-Proxy über dieselbe TCP-Verbindung.

Zur Aktivierung des TCP-Transports im WSO2 ESB fügen Sie Transport-Sender- und Empfängerblöcke in axis2.xml hinzu (Pfad: ESB_HOME/repository/conf/axis2/axis2.xml).

Transport Empfängerblock:

<transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportListener">
    <parameter name="transport.tcp.port">6060</parameter>
</transportReceiver>

Transport Senderblock:

<transportSender name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportSender"/>

Einzelheiten zur Aktivierung des TCP-Transports findest du hier.

Dieses Beispiel 266 zeigt einen Proxy, der SOAP-Nachrichten über TCP empfängt und sie über HTTP weiterleitet.

Wichtige Aspekte der TCP-Kommunikation in der realen Welt

Hier sind einige Aspekte von TCP-Socket-Verbindungen, die bei der Gestaltung von Prozessabläufen für die Client/Server-Kommunikation in der realen Welt zu berücksichtigen sind:

Nachrichten-Begrenzungen

Da es sich bei einer TCP-Socket-Verbindung um einen Bytestrom handelt, muss sowohl die eingehende als auch die ausgehende Nachricht innerhalb von Sonderzeichen eingefügt werden, um die Nachrichtengrenzen anzuzeigen. (z.B.: wir können die Sonderzeichen STX für den Beginn der Nachricht und ETX für das Ende oder die Nachricht verwenden).                    

int STX = 2, ETX = 3;
String stx = new Character((char) STX).toString();
String etx = new Character((char) ETX).toString();
String OutMessage = stx + “Hello Server!” + etx;

Hinweis: Es gibt ein separates WebSocket-Protokoll, das statt eines Bytestroms einen Nachrichten-Stream ermöglicht, in dem du keine Nachrichtengrenzen verwalten musst. Tatsächlich ist WebSocket im Grunde ein nachrichtenorientiertes Appprotokoll, das TCP als Transportebene nutzt.

Blockierende/nicht blockierende Streams

Clients können die Anforderung senden und den ausgehenden Streams blockieren, bis sie in einem bestimmten Zeitintervall eine Antwort vom Server erhalten haben. Das wird auch als synchroner Modus der Kommunikation mit dem Server bezeichnet.

Der Client kann sich auch dafür entscheiden, den ausgehenden Stream nach dem Senden einer Anforderung nicht zu blockieren; in diesem Fall wird dies als asynchroner Kommunikationsmodus bezeichnet. In der asynchronen Kommunikationsart können Clients mehrere Anforderungen an den Server senden, ohne die Antwort auf vorherige Anforderungen zu blockieren oder darauf zu warten.

Einzelport- oder Dualport-Kommunikation

Die TCP-Socket-Kommunikation kann auf zwei verschiedene Arten eingerichtet werden:

Single Socket – Über einen Socket fließen die Anfragen in beide Richtungen zwischen Client und Server. Der Server wartet auf Verbindungen vom Client und nimmt diese an.

Bei der Verwendung eines einzelnen Sockets muss sich der Client darüber im Klaren sein, dass nach dem Senden einer Anfrage die nächste eingehende Nachricht nicht unbedingt die Antwort auf diese Anfrage ist, sondern stattdessen eine unaufgeforderte Benachrichtigung oder eine Anfrage vom Server sein kann. Der Client hat alle Mitglieder der eingehenden Anfrage zu untersuchen, um festzustellen, wie die Nachricht korrekt zu behandeln ist.

Dual Socket – Diese Einrichtung bietet eine klarere Unterscheidung zwischen Client- und Server-Rollen. Beide Seiten fungieren sowohl als Client als auch als Server und stellen eine Verbindung mit der jeweils anderen Seite her. Die Anfragen werden immer von Client zu Server über die Socket-Verbindung gesendet, die von der Seite, die die Nachricht sendet, hergestellt wurde. Dabei müssen beide Seiten auf Verbindungen warten und diese akzeptieren.

Kurz-/Langlebige Verbindung

Bei einer kurzzeitigen Verbindung stellt der Client eine TCP-Verbindung mit dem Server her, versendet oder empfängt Nachrichten und schließt die Verbindung. In einer langlebigen Verbindung stellt der Client eine TCP-Verbindung mit dem Server her und lässt sie offen, solange Transaktionen fließen, und die Verbindung wird nach einer Zeit der Inaktivität auf der Socket-Verbindung geschlossen. Je nach Wunsch muss der Client unter Umständen die Heartbeat-Nachrichten an den Server senden, um die TCP-Sitzung in regelmäßigen Zeitabständen aktiv zu halten.

Fehlerbehebung

Du kannst dich dafür entscheiden, deinen eigenen Java-Client- oder Server-App zu entwickeln, um Client- oder Server-Rollen zu simulieren, es wäre jedoch nützlich, über einige Tools zur Fehlersuche zu verfügen, wie z.B: Tcpmon, Tcpdump & Hercules, um dir viel Zeit zu sparen.

Zusammenfassung

Mit dem TCP-Transport im WSO2 ESB kannst du SOAP-Nachrichten über das Transmission Control Protocol (TCP) an den TCP-Proxy, der auf dem WSO2 ESB läuft, über die gleiche TCP-Verbindung senden und empfangen. Allerdings sind nicht alle Aspekte der TCP-Kommunikation in TCP-Transporten konfigurierbar. Falls die Konfiguration des TCP-Transports im WSO2 ESB nicht ausreicht, kannst du je nach deinen Anforderungen erwägen, einen benutzerdefinierten Mediator und/oder benutzerdefinierte eingehende Endpunkte für die TCP-Kommunikation zu entwickeln