-1

ビジターポートを検出するためのこの小さな機能があります。問題は、速度が遅すぎることです。ページの読み込み時間が約 3 秒長くなります。当然、これは受け入れられません。

ページの読み込み時間を改善するためにこれを改善できる人はいますか?

function ipProxyPortCheck($ip){
    $timeout = 1;
    $ports = array(80,3128,8080);
    $flag = 0;
    foreach($ports as $port){
        @$fp = fsockopen($ip,$port,$errno,$errstr,$timeout);
        if(!empty($fp)){
            $flag = 1;
            fclose($fp);
        }
    }
    return $flag;
}
4

3 に答える 3

2

このコードは、タイムアウト値を減らす以外の一般的なケースでは改善できません。訪問者に接続しようとしてもまったく応答しない場合は、接続不能であると判断する前に、完全なタイムアウト間隔が経過する必要があります。

それ以外に、接続に成功したときに追加できる改善点はbreak;、他のポートにも接続しようとしないようにすることです (接続する必要はありません)。ただし、これは、訪問者が最初に接続可能である場合にのみ役割を果たします。

于 2012-08-06T13:29:30.677 に答える
1

タイムアウトを減らすことができます。fsockopenは、秒単位のタイムアウトであるタイムアウトとして float を受け入れます。

于 2012-08-06T13:30:08.140 に答える
0

ビジターポートを検出するためのこの小さな機能があります。問題は、速度が遅いことです。ページの読み込み時間が約 3 秒長くなりますが、当然これは受け入れられません。ページの読み込み時間を改善するためにこれを改善できる人はいますか?

まず、IP ごとに 1回実行し、連続したリクエストの結果を保存します。次に、タイムアウトをたとえば 0.5 秒に減らすことができます ( を使用$timeout = 0.5)。次に、ポートの 1 つが開いたらすぐに関数から戻るようにしてください。これにより、可能な限り最小限の数のポートがチェックされるため、待機時間が短縮されます。最後に、どのポートが開いている可能性が最も高いかを判断するために、しばらくの間開いていたポートをログに記録することをお勧めします。それに応じて並べ替えることができます$ports。したがって、ポートがor80よりも「開いている」可能性が高い場合は、ポートが最初に来るようにしてください。80803128

function ipProxyPortCheck($ip){
    $timeout = 0.5;
    $ports = array(80,8080,3128);
    foreach($ports as $port){
        if((@$fp = fsockopen($ip,$port,$errno,$errstr,$timeout)) !== false) {
           fclose($fp);
           return 1;
        }
    }
    return 0;
}
于 2012-08-06T13:39:43.527 に答える