From fda1ccd38e222e109e4dcad5b837b4a1bf73995d Mon Sep 17 00:00:00 2001 From: Dominik Pfennig <dominik@suma-ev.de> Date: Wed, 8 Jun 2016 13:25:54 +0200 Subject: [PATCH] =?UTF-8?q?=C3=84nderungen=20in=20der=20Auswertung=20des?= =?UTF-8?q?=20Parameters=20"time"=20Wie=20lange=20auf=20alle=20Suchmaschin?= =?UTF-8?q?en=20gewartet=20wird=20entscheidet=20sich=20jetzt=20anhand=20vo?= =?UTF-8?q?n=203=20Parametern:=20Wenn=20die=20bisherige=20Zeit=20<=20500?= =?UTF-8?q?=20ms=20ist:=20=09Wird=20das=20Warten=20nur=20abgebrochen,=20fa?= =?UTF-8?q?lls=20alle=20Suchmaschinen=20geantwortet=20haben=20Wenn=20die?= =?UTF-8?q?=20bisherige=20Zeit=20>=3D=20500=20ms,=20aber=20kleiner=20der?= =?UTF-8?q?=20eingestellten=20Suchzeit=20ist:=20=09Wird=20das=20Warten=20a?= =?UTF-8?q?bgebrochen,=20falls=20mindestens=2080%=20der=20Suchmaschinen=20?= =?UTF-8?q?geantwortet=20haben.=20Wenn=20die=20bisherige=20Zeit=20>=3D=20d?= =?UTF-8?q?er=20eingestellten=20Suchzeit=20ist:=20=09Wird=20in=20jedem=20F?= =?UTF-8?q?all=20abgebrochen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dies sollte einige Probleme beheben, bei dem Suchergebnisse nicht geladen wurden. --- app/MetaGer.php | 65 +++++++++++++++++++++++++++---------- app/Models/Searchengine.php | 12 +++++-- 2 files changed, 57 insertions(+), 20 deletions(-) diff --git a/app/MetaGer.php b/app/MetaGer.php index 5206bd9ca..163987a73 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 7763487e2..3feafc222 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 = ''; -- GitLab