Hallo zusammen,
ich habe ein Problem mit mehreren https-requests mit curl wo ich nicht mehr weiter weiß. Bei ewiger suche fand ich nichts passendes, also nun direkt hier:
Rahmenbedingungen:
Es geht um eine "kleine" Änderung an einer Produktiven Web-Anwendung.
Prinzipiell geht es darum, spezielle Geräte über https-requests zu Steuern, also an- bzw. ab zu schalten und ihren Status ab zu fragen. Die tue ich über einen cUrl-request:
Auf der "Übersichtsseite" der Anwendung sollen eben alle Geräte mit ihrem Status angezeigt werden, das klappt soweit auch wunderbar. Die Geräte werden nacheinander angesprochen und mit Ihrem Status untereinander in einer Tabelle ausgegeben.
Problem:
Es kann nicht immer garantiert werden, dass alle dieser Geräte antworten, daher ein Timeout von 3 sec, was wiederum nötig ist, da die Geräte nach längerer Inaktivität zum Teil 2-3 Sekunden brauchen, bis sie antworten.
Es kommt nicht selten vor, dass 2 Geräte, oder sogar mehr, nicht innerhalb dieser 3 Sekunden antworten. Während dieser "Timout-Zeit" wird allerdings in der Anwendung nichts angezeigt, kein Ladebalken, keine HTML Elemente, nichts. Für den Anwender sieht es so aus als ob nichts passiert. Erst wenn die Timeouts alle abgelaufen sind, wird das gesamte Ergebnis auf einen Schlag angezeigt. Im Falle von 2 nicht erreichbaren Geräten dauert das dann mindestens 6 Sekunden - zu lang um einfach "nichts" anzuzeigen.
Ich habe schon versucht, mit flush() und obstart() -> ob_flush() zumindest die Ausgabe einer einfachen Überschrift zu erzwingen. Aber obwohl die requests im Script erst später aufgerufen werden, wird erst nach den timouts überhaupt etwas angezeigt. Ich möchte aber gerne zumindest die Überschrift sofort anzeigen, um nicht den Eindruck zu vermitteln, es würde nichts passieren.
Es scheint mir also so, als ob die https-request trotz flush() abgewartet werden, bevor etwas ausgegeben wird.
Ich hoffe jemand kann mir weiter helfen.
Danke im Vorraus,
Grüße
ich habe ein Problem mit mehreren https-requests mit curl wo ich nicht mehr weiter weiß. Bei ewiger suche fand ich nichts passendes, also nun direkt hier:
Rahmenbedingungen:
Es geht um eine "kleine" Änderung an einer Produktiven Web-Anwendung.
Prinzipiell geht es darum, spezielle Geräte über https-requests zu Steuern, also an- bzw. ab zu schalten und ihren Status ab zu fragen. Die tue ich über einen cUrl-request:
PHP-Code:
function aufruf($IP, $action)
{
$url = "https://$IP/nph-vpn.cgi?cmd=$action";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
PHP-Code:
while ($row=mysql_fetch_array($result)) {
// Statusabfrage des Geräts
// Fallunterscheidung der Zustände
// Ausgabe des Geräts mit Zustand als neue Tabellenzeile
}
Es kann nicht immer garantiert werden, dass alle dieser Geräte antworten, daher ein Timeout von 3 sec, was wiederum nötig ist, da die Geräte nach längerer Inaktivität zum Teil 2-3 Sekunden brauchen, bis sie antworten.
Es kommt nicht selten vor, dass 2 Geräte, oder sogar mehr, nicht innerhalb dieser 3 Sekunden antworten. Während dieser "Timout-Zeit" wird allerdings in der Anwendung nichts angezeigt, kein Ladebalken, keine HTML Elemente, nichts. Für den Anwender sieht es so aus als ob nichts passiert. Erst wenn die Timeouts alle abgelaufen sind, wird das gesamte Ergebnis auf einen Schlag angezeigt. Im Falle von 2 nicht erreichbaren Geräten dauert das dann mindestens 6 Sekunden - zu lang um einfach "nichts" anzuzeigen.
Ich habe schon versucht, mit flush() und obstart() -> ob_flush() zumindest die Ausgabe einer einfachen Überschrift zu erzwingen. Aber obwohl die requests im Script erst später aufgerufen werden, wird erst nach den timouts überhaupt etwas angezeigt. Ich möchte aber gerne zumindest die Überschrift sofort anzeigen, um nicht den Eindruck zu vermitteln, es würde nichts passieren.
Es scheint mir also so, als ob die https-request trotz flush() abgewartet werden, bevor etwas ausgegeben wird.
Ich hoffe jemand kann mir weiter helfen.
Danke im Vorraus,
Grüße
Kommentar