fb
WSO2 Tutorial 5 minuten

TCP-socket communicatie met WSO2 ESB

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

Sockets maken communicatie tussen computers in een netwerk mogelijk. Iedere keer dat het apparaat van een gebruiker moet spreken met een server (bijvoorbeeld als de browser van de gebruiker een webpage op het internet opvraagt), wordt er een socket geopend en gebruikt om de informatie tussen de gebruiker en de server over te dragen. Over het algemeen verwijzen sockets naar een Internet Protocol (IP) voor het doorgeven van gegevenspakketten over netwerkgrenzen, of naar een TCP (Transmission Control Protocol) of UDP (User Datagram Protocol) als protocollen voor 1-op-1 verbindingen tussen twee knopen binnen een netwerk. Een TCP garandeert dat de ontvanger de pakketten in dezelfde volgorde ontvangt als waarin zij verzonden zijn, maar het is relatief langzaam en daarom geschikt voor applicaties die een hogere betrouwbaarheid in berichten vereisen. UDP is daarentegen sneller, maar garandeert niet dat de berichten of pakketten die verzonden zijn aankomen of niet. UDP wordt gebruikt als snelheid gewenst is en foutcorrecties niet noodzakelijk zijn. Voorbeelden waarbij UDP veel gebruikt wordt zijn te vinden in live uitzendingen en online spellen. In deze blog richten we ons alleen op TCP-sockets en voornamelijk TCP-socket communicatie met WSO2 ESB.

TCP-Sockets

Met een TCP als socket protocol kan een continue duplexverbinding met een stroom van bytes tussen de gebruiker en een server tot stand gebracht worden. Sockets worden geassocieerd met een socketadres, wat bestaat uit een IP-adres en een poortnummer.

Blog-5-2

Er zal een TCP-socketsessie aangemaakt moeten worden tussen de gebruiker en de server om de communicatie op gang te brengen in de vorm van een stroom van bytes. Wanneer de TCP-socketsessie tot stand gebracht is, worden er zogenaamde ‘socket streams’ gecreëerd voor inkomend en uitgaand verkeer tussen de gebruiker en de server.

TCP-Transport binnen WSO2 ESB

Het TCP-transport binnen WSO2 ESB geeft je de mogelijkheid om SOAP-berichten te verzenden en te ontvangen via het TCP naar de TCP-Proxy door dezelfde TCP-verbinding.

Om dit TCP-transport in te schakelen in WSO2 ESB zullen de Transport-sender en Transport-receiver blokken toegevoegd moeten worden in axis2.xml (bestandspad: ESB_HOME/repository/conf/axis2/axis2.xml).

Het Transport-receiver blok ziet er zo uit:

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

En het Tansport-sender blok zo:

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

Lees hier hoe je een TCP-transport inschakelt.

Bekijk sample 266 om te zien hoe een Proxy SOAP-berichten ontvangt via TCP en deze doorstuurt via HTTP.

Belangrijke aspecten van TCP-Communicatie in de echte wereld

Dit zijn een aantal aspecten van TCP-socket connecties die overwogen zullen moeten worden voor het ontwerp van processtromen voor client/server communicatie in echte gevallen:

Begrenzing van berichten

Wanneer we werken met bytes stream in de TCP-socket verbinding, zullen zowel uitgaande als inkomende berichten in speciale tekens gevat moeten worden om de grenzen van berichten aan te geven. (We kunnen bijvoorbeeld speciale tekens STX voor het begin van een bericht en ETX voor het eind van een bericht gebruiken.)

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;

Let op: Er is een afzonderlijk WebSocket protocol dat een stroom aan berichten mogelijk maakt in plaats van een stroom bytes. In dat geval hoef je de grenzen van berichten niet te managen. Feitelijk is WebSocket een berichtgeoriënteerd applicatieprotocol, wat gebruik maakt van TCP als een transportlaag.

Blokkerende / niet blokkerende stromen

Gebruikers kunnen de aanvraag versturen en de uitgaande stroom blokkeren totdat er, binnen een bepaald tijdsbestek, een reactie ontvangen is van de server. Dit wordt ook wel een synchrone communicatiemodus met de server genoemd.

De gebruiker kan ook kiezen om de uitgaande stroom niet te blokkeren nadat een aanvraag verzonden is. In dat geval wordt gesproken van een asynchrone communicatiemodus. In de asynchrone communicatiemodus kunnen gebruikers meerdere aanvragen naar de server sturen, zonder te wachten op reactie op eerdere aanvragen en zonder deze te blokkeren.

Communicatie met een enkele of dubbele poort

TCP-Socket communicatie kan op twee manier opgezet worden:

Single socket: Vraagt om een stroom in beide richtingen tussen gebruiker en server door een enkele socket. De server luistert naar en accepteert verbindingen van de gebruiker.

Bij het gebruik van een enkele socket moet de gebruiker beseffen dat na het versturen van een aanvraag, het daaropvolgende inkomende bericht niet gegarandeerd de reactie is op die aanvraag. Het zou ook een ongevraagde melding of een aanvraag van de server aan de gebruiker kunnen zijn. De gebruiker moet dus alle delen van de inkomende aanvraag beoordelen om te bepalen hoe het bericht correct afgehandeld kan worden.

Dual socket: Deze opstelling geeft een duidelijker onderscheid tussen de rollen van gebruiker en server. Iedere kant heeft zowel de rol van gebruiker als die van server en legt verbinding met de ander. Aanvragen worden altijd van de gebruikersrol naar de serverrol verzonden via de socket-verbinding die tot stand gebracht werd door de kant die het bericht verstuurde. Beide kanten moeten dus opletten of er verbindingen aangevraagd worden en deze verbindingen accepteren.

Kortstondige of langdurige verbinding

Bij een kortstondige verbinding creëert de gebruiker een TCP-verbinding met de server, verstuurt of ontvangt berichten en verbreekt de verbinding. Bij een langdurige verbinding creëert de gebruiker een TCP-verbinding met de server en laat deze open staan zo lang de transacties blijven doorstromen. De verbinding wordt pas verbroken na een periode van inactiviteit op de socket-connectie. Afhankelijk van de vereisten zou de gebruiker op regelmatige intervallen ‘hartslag’-berichten naar de server kunnen sturen om de TCP-sessie levend te houden.

Debuggen

Je zou ervoor kunnen kiezen om je eigen Java-client of -server applicaties de gebruikersrol te laten nabootsen, maar het is handig om enkele traffic debugging tools in te zetten zoals: Tcpmon, Tcpdump & Hercules, die een berg tijd kunnen besparen.

Wat kan er nog meer?

Het TCP-transport in WSO2 ESB geeft je de mogelijkheid om SOAP-berichten te verzenden en te ontvangen over het Transmission Control Protocol (TCP) van en naar de TCP Proxy die op WSO2 ESB draait, allemaal door dezelfde TCP-verbinding. Maar niet alle aspecten van TCP-communicatie zijn in TCP-transports instelbaar. Afhankelijk van jouw vereisten zou de TCP-Transport configuratie binnen WSO2 ESB onvoldoende mogelijkheden kunnen bieden en kun je overwegen om een custom mediator en/of custom inbound endpoints te ontwerpen voor je TCP-communicatie.