Commit fda1ccd3 authored by Dominik Hebeler's avatar Dominik Hebeler
Browse files

Änderungen in der Auswertung des Parameters "time"

Wie lange auf alle Suchmaschinen gewartet wird entscheidet sich jetzt anhand von 3 Parametern:
Wenn die bisherige Zeit < 500 ms ist:
	Wird das Warten nur abgebrochen, falls alle Suchmaschinen geantwortet haben
Wenn die bisherige Zeit >= 500 ms, aber kleiner der eingestellten Suchzeit ist:
	Wird das Warten abgebrochen, falls mindestens 80% der Suchmaschinen geantwortet haben.
Wenn die bisherige Zeit >= der eingestellten Suchzeit ist:
	Wird in jedem Fall abgebrochen.

Dies sollte einige Probleme beheben, bei dem Suchergebnisse nicht geladen wurden.
parent f2002d44
......@@ -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") )
......
......@@ -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 = '';
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment