# Irgendwas ist mit unserem Socket passiert. Wir brauchen einen neuen:
if($this->fp&&is_resource($this->fp)){
fclose($this->fp);
}
Redis::del($this->name.".".$this->socketNumber);
$this->fp=$this->getFreeSocket();
$sent=0;
$string=$out;
continue;
}
try{
$tmp=fwrite($this->fp,$string);
}catch(\ErrorException$e){
# Irgendwas ist mit unserem Socket passiert. Wir brauchen einen neuen:
if($this->fp&&is_resource($this->fp)){
fclose($this->fp);
}
Redis::del($this->name.".".$this->socketNumber);
$this->fp=$this->getFreeSocket();
$sent=0;
$string=$out;
continue;
}
if($tmp){
$sent+=$tmp;
$string=substr($string,$tmp);
}
if($sent>=strlen($out)){
break;
}
}
if($sent===strlen($out)){
returntrue;
}
returnfalse;
}
publicfunctiongetFreeSocket()
{
# Je nach Auslastung des Servers ( gleichzeitige Abfragen ), kann es sein, dass wir mehrere Sockets benötigen um die Abfragen ohne Wartezeit beantworten zu können.
# pfsockopen öffnet dabei einen persistenten Socket, der also auch zwischen den verschiedenen php Prozessen geteilt werden kann.
# Wenn der Hostname mit einem bereits erstellten Socket übereinstimmt, wird die Verbindung also aufgegriffen und fortgeführt.
# Allerdings dürfen wir diesen nur verwenden, wenn er nicht bereits von einem anderen Prozess zur Kommunikation verwendet wird.
# Wenn dem so ist, probieren wir den nächsten Socket zu verwenden.
# Dies festzustellen ist komplizierter, als man sich das vorstellt. Folgendes System sollte funktionieren:
# 1. Stelle fest, ob dieser Socket neu erstellt wurde, oder ob ein existierender geöffnet wurde.