Forums Neueste Beiträge
 

isochrones read/write text/binary

08/08/2010 - 10:56 von Ulli Horlacher | Report spam
In einer Client/Server Anwendung liest der Client Daten aus einer Pipe
(fifo) und uebergibt die Daten zum Server.

Die Datenuebertragung sollte isochron erfolgen, also mit moeglichst
kleiner Verzoegerung durch Pufferung.

Bei Text-Daten ist das auch kein Problem:

while (defined ($line = <$fifo>)) {
print {$server} $line;
}

Funktioniert prima. Allerdings kann man so nicht Binaer-Daten uebertragen.
Die muessen gar kein EOL enthalten.

while (read $fifo,$chunk,$blocksize) {
print {$server} $chunk;
}

funktioniert nur, wenn $fifo staendig Daten nachliefert.
Sollte da der Daten-Nachschub stocken, bleibt der read stehen, weil $chunk
nicht ganz gefuellt ist. Es wird solange gewartet bis $blocksize erreicht
ist.

Damit ist die Isochronoitaet futsch: Der Server bekommt erst (sehr) viel
spaeter Daten, die der Client schon laengst hat. U.u. erst Stunden spaeter.

Wie loest man das Dilemma?


Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum E-Mail: horlacher@rus.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-685-65868
Allmandring 30 Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.rus.uni-stuttgart.de/
 

Lesen sie die antworten

#1 mlelstv
08/08/2010 - 11:03 | Warnen spam
Ulli Horlacher writes:

Die muessen gar kein EOL enthalten.

while (read $fifo,$chunk,$blocksize) {
print {$server} $chunk;
}

funktioniert nur, wenn $fifo staendig Daten nachliefert.
Sollte da der Daten-Nachschub stocken, bleibt der read stehen, weil $chunk
nicht ganz gefuellt ist. Es wird solange gewartet bis $blocksize erreicht
ist.

Wie loest man das Dilemma?



Mit sysread.

Michael van Elst
Internet:
"A potential Snark may lurk in every tree."

Ähnliche fragen