hallo rudi,
ich verwende HttpUtils_NonblockingGet um daten von einem (recht langsamen) arduino zu holen. hierbei kommen die daten über mehrere (bis viele) sekunden eingetröpfelt. nicht nur wegen der gesheindigekeit sondern auch da auf rund des wenigen speichers viele kleine pakete geschickt werden.
mit dem bisherigen timeout lässt sich das nicht besonders gut behandeln da ein kleiner timeout bei vielen daten nicht passt, ein großer timeout zwar passt, aber tatsächliche fehler zu spät bemerkt werden. auch ist der tatsächliche timeout wert schlecht zu bestimmen da die größe der antwort ziemlich variieren kann.
der folgende patch ergänzt eine incrementalTimout option mit dem der timeout jedes mal nach dem empfang von daten neu gestartet wird. so kann man mit einem recht kurzen timeout arbeiten. das passt sehr gut zum verhalten des arduino. die daten kommen zwar langsam, aber kontinuierlich.
ich könnte mir vorstellen das diese behandlung auch noch für andere embedded devices passt.
gruss
andre
--- HttpUtils.pm (revision 16301)
+++ HttpUtils.pm (working copy)
@@ -574,6 +574,12 @@
RemoveInternalTimer(\%timerHash);
my ($err, $ret, $redirect) = HttpUtils_ParseAnswer($hash);
$hash->{callback}($hash, $err, $ret) if(!$redirect);
+
+ } elsif( $hash->{incrementalTimout} ) {
+ #Log 5, "got data, incrementing timout for '$hash->{url}'";
+ RemoveInternalTimer(\%timerHash);
+ InternalTimer(gettimeofday()+$hash->{timeout},
+ "HttpUtils_Err", \%timerHash);
}
};
Danke, habs kurz getestet und eingecheckt, nur vorher ein "e" spendiert (incrementalTimeout).
danke. auch für das e :)
Hallo Andre,
könntest Du den Parameter im Wiki mit dokumentieren? Bevor ich was falsches schreibe.
Danke
Gruß
Markus
hab mal was geschrieben. schau bitte ob es dir gefällt.
gruss
andre