Таким образом, первоначальная проблема заключается в том, что мы запускаем «веб-стандартное» приложение веб-приложения на Java на серверах приложений WebSphere с около 100 млн посещений в год. Проблема заключается в том, что после перезапуска этих серверов приложений нам нужно перейти на несколько ключевых страниц, чтобы основные сервлеты были скомпилированы до того, как мы выпустим на них публику ... в противном случае они имеют тенденцию аварийно завершать работу при первоначальном столкновении.
В некоторых кластерах требуется около 6 страниц, которые нужно посетить, по одному разу для каждого из 35+ рынков .... 200 URL-адресов ish!
Итак, скрипт, над которым я работаю, проделал всю тяжелую работу, связанную с тем, как собрать все эти URL-адреса, и в конце все это список из 200 URL-адресов в массиве ... теперь, как поразить их?
Мы использовали CGI для этого ранее, и его главная проблема была в том, что он был синхронным ... занимал много времени. Теперь я пытаюсь создать простой url.php, который будет отображать один URL-адрес, который я затем смогу вызвать из JQuery асинхронным способом. Конечно, сначала я не хочу бить все 200, вероятно, партиями по 5 должно быть увеличение скорости на 500%:)
Так что на url.php. Я не очень часто использовал php в прошлом, поэтому сокеты немного новы для меня. До сих пор я собирал это:
function checkUrl($url,$port) {
set_time_limit(20);
ob_start();
header("Content-Type: text/plain");
$u = $url;
$p = $port;
$post = "HEAD / HTTP/1.1\r\n";
$post .= "Host: $u\r\n";
$post .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2\r\n";
$post .= "Keep-Alive: 200\r\n";
$post .= "Connection: keep-alive\r\n\r\n";
$sock = fsockopen($u, $p, $errno, $errstr, 10);
if (!$sock) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($sock, $post, strlen($post));
while (!feof($sock)){
echo fgets($sock);
}
ob_end_flush();
}
}
Что отлично работает, если URL-адрес просто someserver.somedomain.com, но если Uri-файл коснулся в конце, произойдет сбой (например, someserver.somedomain.com/gb/en)
Насколько я понимаю, все, что я до сих пор делал с кодом, - это открываю сокетное соединение ... но как я могу получить его для анализа пути отдельно?
Единственный вывод, который мне нужен от этого в конце, - это код состояния HTTP (200, 404, 301 и т. Д.), Хотя важно, чтобы он сначала извлекал всю страницу целиком для правильной ее компиляции.