За последние 24 часа нас посетили 60276 программистов и 1812 роботов. Сейчас ищут 835 программистов ...

Ограничение на потоки у downloader`ов

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

  1. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Привет.

    Доделал "отдавалку" контента, чтобы можно было какой-то тип контента (или любой) на неё передавать. Иногда полезно в виде антилича использовать. А готовая программка, которая всегда под боком - нет-нет, да пригодится.

    Короче. Вооот. Ну. Это самое. Вооот.

    Начал тестировать яротно и столкнулся с жопой в виде качалки FlashGet. Хрень в том, что если ограничить кол-во потоков через антилич, то эти самые потоки в программе ну никак не останавливаются, а долбятся и долбятся. Ладно ещё когда заголовок 200, но я ставил и 404. Откровенно говоря, все двухсотые перепробовал, трёхсотые, четырёхсотые и даже пятисотые. Я "Флэшгету" что только не пи*дел, а ему один хрен - продолжает ломится. Заголовки "Флэшгет" принимает, но не понимает.

    Может, кто-нибудь случайно знает как такое победить? Чтобы все неактивные потоки "отвалились", а не стучали туда, где их не ждут и вообще не любят.

    P.S. Завтра скачаю ещё какие-нибудь качалки.
     
  2. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    ИМХО пусть долбятся! никак ты это не ограничешь!
     
  3. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Да, наверное, так и поступлю - забью на это.

    З.Ы. О, у меня было 666 сообщений. %)

    upd в догонку. А какой заголовок об ошибке будет самым правильным для лишних потоков? Я склоняюсь к 403-ей ошибке.
     
  4. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    lexa
    Это сделано в интересах тех, кто скачивает ;) на многих серверах прописано максимальное количество потоков (неважно, с каких IP, можно 10 потоков с одного адреса, а можно по одному потоку с десяти разных адресов, но не более). И эти сервера точно так же возвращают коды ошибки как Бог на душу положит. Поэтому качалки ломятся на сервер, стараясь подхватить лишний поток, как только он освободится, а коды ошибок игнорируют.

    Впрочем, можно скормить клиенту редирект (Location:) куда-нибудь далеко-далеко... тогда он продолжит ломиться, но уже на другой сервер ;)
     
  5. nimistar

    nimistar Активный пользователь

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Dagdamor я себе представляю что за каша будет вместо файла :)
     
  6. mmaavv

    mmaavv Активный пользователь

    С нами с:
    25 мар 2007
    Сообщения:
    59
    Симпатии:
    0
    бери за образец "sshit" - блокируй ip на файерволе на несколько минут - клиент остынет.
     
  7. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Dagdamor, если я потоку сделаю редирект и программа это сьест, то в файл будет записана левая хренатень. :)

    mmaavv, вопроса "как ограничить" нет. Всё легко и просто. Несколько строк на PHP + немного мускула и всё работает как часы. Пока не сдохнет сервер, да. %)
    Кстати, идея блокировкой всего IP чем-то внешним во-первых, неудобна. Во-вторых, убьёт не только лишнии потоки, но и всю скачку.
     
  8. mmaavv

    mmaavv Активный пользователь

    С нами с:
    25 мар 2007
    Сообщения:
    59
    Симпатии:
    0
    lexa
    а если просто die(); и ничего не посылать, даже заголовков?
    или если без Accept-Range и всегда отдавать Content-Range начиная с 0 - как реагируют качалки?
     
  9. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Как я понял, качалки игнорируют заголовки и используют внутреннии данные: первый поток приконектился, получил правильные заголовки, а все дальнейшии потоки отдают только свой range и шлют ответы сервер на.

    Поэтому я забил на это дело и сделал только ограничение на скорость. Совокупность потоков или один поток - это на скорость не влияет, она фиксированная.