За последние 24 часа нас посетили 17545 программистов и 1649 роботов. Сейчас ищут 910 программистов ...

функция sleep и сервер IIS

Тема в разделе "Прочие вопросы по PHP", создана пользователем Dion, 10 июн 2015.

  1. Dion

    Dion Новичок

    С нами с:
    8 июн 2015
    Сообщения:
    4
    Симпатии:
    0
    ... и снова IIS компостирует мозг.
    Не успел я разобраться с одной проблемой, как Web-сервер IIS подкинул мне ещё одну.

    В общем файлы на загрузку отдаются PHP-скриптом, предполагается, что в зависисмости от типа пользователя будет урезаться скорость. Гостям к примеру 100 кб/c

    Почти везде в интернете присутствует этот элементарный пример отдачи файла с использованием функции sleep().
    Код (PHP):
    1. set_time_limit(0); // Неограниченное время выполнение скрипта (для длительных загрузок)
    2. ob_end_clean(); // Отключаем буферизацию вывода
    3.  
    4. // ... (всякий код)
    5.  
    6. $fd = fopen($file, 'rb'); // Открываем файл для чтения
    7. $download_rate = 100; // Ограничение скорости кб/c
    8.    
    9. while (!feof($fd))
    10.  {
    11.         print fread($fd, $download_rate * 1024); // Читаем из файла блок и отдаём его клиенту
    12.         
    13.         sleep(1); // задержка 1 сек
    14.  }
    15.  
    16. fclose($fd);
    17.  
    18. // ... (всякий код)
    19.  
    В общем на Apache под тем же Windows - данный код работает на ура!
    Но на IIS мы видим совершенно другую картину:

    Симптомы такие:
    После клика по ссылке:
    1) Браузер задумывается (вкладка подвисает) от 30 секунд до 1 минуты и дольше
    2) Наконец загрузка стартует и сразу показывает что уже скачено несколько мегабайт
    3) Далее какое-то время загрузка идёт штатно с заданным ограничением скорости
    4) Дойдя до определённого предела* загрузка останавливается, скорость падает до 0 б/c
    5) Через какое-то время браузер выдаёт "ошибка сети" и что-то подобное

    * Предел до которого доходит загрузка и останавливается кратен значению переменной $download_rate, к примеру если указано значение 100 - загрузка дойдёт до 10 мегабайт и остановится, если указать 50, то остановится на 5 мегабайтах

    Подскажите, как это можно разрешить или найти другой способ ограничения скорости в скрипте?

    P.S. С удовольствием бы перешёл на Apache, но заказчик... only IIS :'(
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Лучше спросить на форуме тех поддержки IIS, средствами IIS это будет работать лучше.
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    соглашусь с denis01. не надо делать трафик шейпер на пыхе. пара десятков анонимусов будут держать в озу пару десятков пхп-машин которые спят в ожидании разрешения на следующий кусок. штатные средства веб-сервер будут явно меньше бесполезных нагрузок на сервер давать.