Dieses Paket ermöglicht den streambasierten Versand von beliebigen Daten zwischen zwei
Kommunikationspartnern.
Damit diese Aufgabe erledigt werden kann, müssen zwei Interfaces
(StreamDemultiplexerDirector, StreamMultiplexerDirector)
implementiert werden.
Der erste Kommunikationspartner ist die Sendeapplikation, diese stellt Nutzdaten zur
Verfügung.
Der zweite Kommunikationspartner ist die Empfängerapplikation, diese fordert die
Nutzdaten an um sie zu verarbeiten.
Die Sendeapplikation erzeugt einen StreamMultiplexer um ihre Nutzdaten verschicken zu
können. Die
Empfängerapplikation wird einen StreamDemultiplexer erzeugen um die Nutzdaten empfangen
zu können.
Der StreamMultiplexer übernimmt die Aufgabe des Senders. Er verschickt sogenannte
Nutzdatenpakete an den
StreamDemultiplexer. Der StreamDemultiplexer ist der Empfänger der Nutzdatenpakete. Ein
Nutzdatenaket
besteht aus den Nutzdaten und zusätzlichen Steuerungsinformationen. Die Nutzdaten sind
die Daten, die
eigentlich versandt und weiter verarbeitet werden sollen.
Die Nutzdaten werden also mit dem StreamMultiplexer verschickt, dieser bekommt die
Nutzdaten von der Sendeapplikation.
Der StreamMultiplexer hat über das Interface StreamMultiplexerDirector
Zugriff auf die Sendeapplikation
und kann Nutzdaten anfordern.
Auf der Gegenseite kann die Empfängerapplikation den StreamDemultiplexer auffordern
Nutzdaten bereitzustellen.
Der StreamDemultiplexer speichert(puffert) eingehende Nutzdatenpakete, aus diesem Puffer
werden Anforderungen
an die Empfängerapplikation bedient.
Der Puffer des StreamDemultiplexer wird durch den StreamMultiplexer gefüllt, damit der
StreamMultiplexer (Sender) den
StreamDemultiplexer (Empfänger) nicht überlastet findet eine Flusskontrolle statt.
Der Sender darf also nicht unkontrolliert Nutzdaten verschicken, sondern der Empfänger
muss ihm eine Erlaubnis geben
neue Nutzdatenpakete zu verschicken. Diese Erlaubnis wird "Ticket" genannt.
Der Sender darf den Puffer des Empfängers nur bis zu einer gewissen Grad füllen
(deblockingFactor). Somit sagt der
Empfänger dem Sender wie viele Pakete er verschicken darf, ist dieses Limit erreicht,
stoppt der Sender bis ihm der
Empfänger wieder ein Ticket schickt.
Der Sender verschickt die Nutzdatenpakete nicht einzeln sondern verpackt diese in
größere Pakete.
Die Größe des Senderpuffers kann ebenfalls eingestellt werden.
Die gerade geschilderte Kommunikation bestand nur aus einem Stream. In der Realität
entscheiden sich die
Empfangs/Sendeapplikation vorher über wie viele Stream sie kommunizieren möchten. Der
Empfänger stellt dann
für jeden Stream einen Puffer zur Verfügung und der Sender sendet auf jedem Stream
Nutzdatenpackete.
Die Empfangsapplikation entscheidet dann, von welchem Stream sie Nutzdaten anfordern
möchte.