Иногда зависают сокеты PHP
99 сообщений
#16 лет назад
Приветствую всех!Столкнулся с такой проблемой:
Иногда зависает прогресс скрипта приведенного ниже, пробывал на разных серверах, но всеравно иногда прогресс останавливается пока не откроешь страничку заново.
С чем это может быть связано и какое решение этой проблемы ?
Упростил код для наглядного примера:
set_time_limit(0);
ob_implicit_flush();
for($i=0; $i<500; $i++){
$host = "ya.ru"; // Хосты разные каждый раз
$fp=fsockopen($host, 80, $errno, $errstr, 7);
if($fp){
echo 'ok';
}else{
echo 'no';
}
}
99 сообщений
#16 лет назад
Sleep(1); - Ничего не меняет, только время больше занимает.Хочу еще добавить, что я имею ввиду решение, которое бы перегружало автоматически страницу при зависании, если такое возможно..
Вообщем рассмотрюи другие варианты, предлагайте

21 сообщение
#16 лет назад
А если серьёзно: перезагрузка страницы ничего не даёт, ищите проблему глубже (не в PHP). (так мне кажется :Р)99 сообщений
#16 лет назад
Цитата ("Vitas"):А если серьёзно: перезагрузка страницы ничего не даёт, ищите проблему глубже (не в PHP). (так мне кажется :Р)
Понимаю, но хостер тоже ничем помочь не может (хоть и выделенный сервер). Наверника какието должны быть способы в php для более стабильной работы
ЗЫ Предпологаю что сокет зависает, но не факт.
3240 сообщений
1895 сообщений
#16 лет назад
Тайм аут задается в миллисекундах, если даже взять очень качественную связь по оптике то задержка (Ping) будет около 5-7, а если уже брать сокеты то надо его делать намного больше, в чем и заключалась Ваша ошибка. Попробуйте сменить задержку на 30-100, должно помочь.
3240 сообщений
1895 сообщений
#16 лет назад
Цитата ("tvv"):MMM_Corp, таймаут для функции ссылка задается именно в секундах, а не миллисекундах.
Но и таймаута 7 секунд может быть мало для скрипта, который открывает так много коннекшенов, а вот 30-60 секунд - в самый раз.
Сори, это я по памяти ошибся, всюда как у людей в милисекундах, а тут в секундах, в прочем это не удивляет)