|
|
|
| Доброго времени суточек !
Есть задача при решении которой необходимо выполнять выборку данных с удаленных серверов баз данных, все бы ничего, но если удаленный сервер (его IP) или база данных не отвечают на запрос соединения, то страничка грузится очень долго.
Отсюда вытекает, надо как то проверить доступность удаленного сервера, а именно
1. Если не доступен полностью (IP адрес сервера не виден)
2. Если недоступна база данных (IP адрес сервера виден, порт к базе не виден)
какие могут быть варианты проверки удаленных серверов на работоспособность, да так, чтобы время работы скрипта было минимальным. | |
|
|
|
|
|
|
|
для: DIM@
(05.10.2010 в 03:04)
| | Измените время таймаута, строка - mysql.connect_timeout | |
|
|
|
|
|
|
|
для: Gubichev
(05.10.2010 в 03:23)
| | Если бы всё было так просто, этот вариант я попробовал сразу, ну если сервер недоступен полностью, то этот параметр никак не влияет. | |
|
|
|
|
|
|
|
для: DIM@
(05.10.2010 в 03:04)
| | Поддерживаю. Сам столкнулся, в своё время, с данной проблемой, но ответа не нашел. | |
|
|
|
|
|
|
|
для: mihdan
(05.10.2010 в 12:20)
| | Up | |
|
|
|
|
|
|
|
для: DIM@
(05.10.2010 в 03:04)
| |
<?
// таймаут на подключение 5 сек
$fp = fsockopen('example.com', 80, $errno, $errstr, 5);
// сокет не открылся за требуемое время
if ( $errno > 0 ) {
die("Подключение к серверу не удалось");
}
// таймаут на чтение 5 сек
stream_set_timeout($fp, 5);
fwrite($fp, "HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\n");
$buff = '';
while ( !feof($fp) ) $buff .= fread($fp, 1024);
// не уложились в таймаут
$meta = stream_get_meta_data($fp);
if ( isset($meta['timed_out']) && $meta['timed_out'] ) {
die("Подключение к серверу удалось, но оно тормозит");
}
|
Настраивайте таймауты по своему вкусу. | |
|
|
|
|
|
|
|
для: Саня
(10.10.2010 в 08:37)
| | вот только размер буфера я бы увеличил килобайт до восьми.
Чтоб надежно уложиться в один цикл чтения. | |
|
|
|