I’m writing a small script to see if certain ports on certain devices are in use or are open. My code is:
for($c=1;$c<=16;$c++){
echo "<tr><td>Pod " . $c . "</td>";
for ($d=5000;$d<=5010;$d++){
$tmp=fsockopen("10.0.0." . $c,$d,$erstr, $errno, 1);
if($tmp){
echo "<td class='o'>OPEN</td>";
fclose($tmp);
}
else{
echo "<td class='u'>IN USE</td>";
}
}
ob_flush();
flush();
echo "</tr>\n";
}
echo "</table>";
Obviously this is a lot of connections, and currently it’s taking about ten seconds to run. I was wondering if there’s any way I can get this to be a little bit faster? Thanks for the help!
One way to speed this up tremendously is to get asynchronous. Right now if one of the hosts is slow, it will slow down the entire pipeline because you’re doing one right after another. PHP doesn’t really have an event-based AIO (select), or even threading. It does, however, have fork in a linux environment. The following example hasn’t been tested, but is a general idea for how to do asynchronous IO in php: