Edgar Ehritt: php socketverbindungen

Beitrag lesen

Hallo Glucke,

da läuft ja schon einiges im code gegen den Baum:

for($i=0;$i<100;$i++){  
	$string='';  
	// [link:http://de.php.net/manual/de/function.fsockopen.php]  
	if(($fp=fsockopen("tcp://example.com",10502,$errno,$errstr,0.5))!==false){  
		fputs($fp,"tc=232");  
		while (!feof($fp)) {  
			$string.=fgets($fp);  
		}  
		fclose($fp);  
		continue;  
	}  
	echo "$errstr ($errno)<br />\n";  
}

Analysiere mal die vier Phasen nach ihrer absoluten Dauer:

$deltaT=array(0.0,0.0,0.0,0.0);  
for($i=0;$i<100;$i++){  
	$time  =microtime(true);  
	$string='';  
  
	if(($fp=fsockopen("tcp://example.com",10502,$errno,$errstr,0.5))!==false){  
		$deltaT[0]+=microtime(true)-$time;  
		fputs($fp,"tc=232");  
		$deltaT[1]+=microtime(true)-$deltaT[0];  
		while (!feof($fp)) {  
			$string.=fgets($fp);  
		}  
		$deltaT[2]+=microtime(true)-$deltaT[1];  
		fclose($fp);  
		$deltaT[3]+=microtime(true)-$deltaT[2];  
		continue;  
	}  
	echo "$errstr ($errno)<br />\n";  
}  
echo "<pre>";  
print_r($deltaT);  
echo "</pre>";

Danach weißt Du dann genau in welcher Phase es zu Verzögerungen kommt. Des weiteren wäre noch interessant, ob der host, der hier beispielhaft mit example.com angegeben ist, immer der selbe ist und wenn ja, ob der angesprochene Dienst persistente Verbindungen unterstützt.

Gruß aus Berlin!
eddi