Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
2 merge requests!73Updates from Master,!68Bugfix
......@@ -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 = '';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment