diff --git a/app/MetaGer.php b/app/MetaGer.php index 5206bd9ca6787ce862b1d1a24c467869fc789231..163987a7376dd06d034250c22023b3567228a825 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -218,7 +218,6 @@ class MetaGer #die(SocketRocket::get("tls", "dominik-pfennig.de", "", 443)); - # Überprüfe, welche Sumas eingeschaltet sind $xml = simplexml_load_file($this->sumaFile); $enabledSearchengines = []; @@ -239,12 +238,12 @@ class MetaGer foreach($sumas as $suma) { if($request->has($suma["service"]) - || ( $this->fokus !== "bilder" - && ($suma["name"]->__toString() === "qualigo" - || $suma["name"]->__toString() === "similar_product_ads" - || ( !$overtureEnabled && $suma["name"]->__toString() === "overtureAds" ) - ) - ) + #|| ( $this->fokus !== "bilder" + # && ($suma["name"]->__toString() === "qualigo" + # || $suma["name"]->__toString() === "similar_product_ads" + # || ( !$overtureEnabled && $suma["name"]->__toString() === "overtureAds" ) + # ) + # ) #|| 1 === 1 #Todo: entfernen ){ @@ -286,7 +285,7 @@ class MetaGer } } - if( ( $this->fokus !== "bilder" && $countSumas <= 0 ) || ( $this->fokus === "bilder" && sizeof($enabledSearchengines) === 0) ) + if( $countSumas <= 0 ) { $this->errors[] = "Achtung: Sie haben in ihren Einstellungen keine Suchmaschine ausgewählt."; } @@ -316,19 +315,48 @@ class MetaGer $this->sockets[$tmp->name] = $tmp->fp; } } - # Nun passiert ein elementarer Schritt. # Wir warten auf die Antwort der Suchmaschinen, da wir vorher nicht weiter machen können. # aber natürlich nicht ewig. # Die Verbindung steht zu diesem Zeitpunkt und auch unsere Request wurde schon gesendet. # Wir geben der Suchmaschine nun bis zu 500ms Zeit zu antworten. - usleep(500000); + # Jetzt lesen wir alles aus, was da ist und verwerfen den Rest: - foreach($engines as $engine) + $enginesToLoad = count($engines); + $loadedEngines = 0; + $time = 0; + while( true ) { - $engine->retrieveResults(); + # Abbruchbedingung + if($time < 500) + { + if($loadedEngines >= $enginesToLoad) + break; + }elseif( $time >= 500 && $time < $this->time) + { + if( ($loadedEngines / ($enginesToLoad * 1.0)) >= 0.8 ) + break; + }else + { + break; + } + foreach($engines as $engine) + { + if(!$engine->loaded) + { + $success = $engine->retrieveResults(); + if($engine->loaded) + $loadedEngines += 1; + } + } + usleep(50000); + $time += 50; + } + foreach( $engines as $engine ) + { + if( !$engine->loaded ) + $engine->shutdown(); } - $this->engines = $engines; } @@ -393,7 +421,8 @@ class MetaGer # Category $this->category = $request->input('category', ''); # Request Times: - $this->time = $request->input('time', 1); + $this->time = $request->input('time', 1000); + # Page $this->page = $request->input('page', 1); # Lang @@ -416,12 +445,12 @@ class MetaGer # Manchmal müssen wir Parameter anpassen um den Sucheinstellungen gerecht zu werden: if( $request->has('dart') ) { - $this->time = 10; + $this->time = 10000; $this->warnings[] = "Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt."; } - if( $this->time < 0 || $this->time > 20 ) + if( $this->time <= 500 || $this->time > 20000 ) { - $this->time = 1; + $this->time = 1000; } if( $request->has('minism') && ( $request->has('fportal') || $request->has('harvest') ) ) { @@ -438,7 +467,7 @@ class MetaGer } if( $request->has('ebay') ) { - $this->time = 2; + $this->time = 2000; $this->warnings[] = "Hinweis: Sie haben Ebay aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 2 Sekunden hochgesetzt."; } if( App::isLocale("en") ) diff --git a/app/Models/Searchengine.php b/app/Models/Searchengine.php index 7763487e267c2ee9d4e76608a986457296fa3351..3feafc2223a1b2c5bd92e17c43514ede00d9cb37 100644 --- a/app/Models/Searchengine.php +++ b/app/Models/Searchengine.php @@ -19,6 +19,7 @@ abstract class Searchengine public $ads = []; public $write_time = 0; public $connection_time = 0; + public $loaded = false; function __construct(\SimpleXMLElement $engine, MetaGer $metager) { @@ -231,6 +232,7 @@ abstract class Searchengine // end of headers if(sizeof($headers) > 1){ $bodySize = 0; + stream_set_blocking($this->fp, 1); if( isset($headers["Transfer-Encoding"]) && $headers["Transfer-Encoding"] === "chunked" ) { $body = $this->readChunked(); @@ -245,9 +247,10 @@ abstract class Searchengine { die("Konnte nicht herausfinden, wie ich die Serverantwort von: " . $this->name . " auslesen soll. Header war: " . print_r($headers)); } + $this->loaded = true; }else { - fclose($this->fp); + return; } Redis::del($this->host . "." . $this->socketNumber); @@ -256,7 +259,6 @@ abstract class Searchengine { $body = $this->gunzip($body); } - #print_r($headers); #print($body); #print("\r\n". $bodySize); @@ -268,6 +270,12 @@ abstract class Searchengine #exit; } + public function shutdown() + { + fclose($this->fp); + Redis::del($this->host . "." . $this->socketNumber); + } + private function readBody($length) { $theData = '';