Как узнать, какую часть файла скачал клиент до обрыва связи?
а зачем тебе снимать за трафик? Снимай за факт завершенной скачки.
Или по кускам.
---
...Я работаю антинаучным аферистом...
К ней надо будет просто прикрутить учет траффика (добавить register_shutdown_function, например, которая будет отправлять в базуданные). Если буффер совсем небольшой, то ошибки будут незначительные. Их даже можно учесть, анализируя то, как разорвалось соединение.
Другой вариант - пишешь проксю, которая будет учитывать скачанные байты. Или вообще другой веб-сервер для скачиваемых файлов.
зы: порносайт пишешь?
Попроси Сысоева, чтобы nginx писал в лог, сколько скачано фактически за данное соединение. Или сам патч напиши, и ему пришли.
Снимай за факт завершенной скачки.А как отловить факт завершенной скачки?
Тебе дать написанную на пхп систему докачки?
Мне не ндо докачивать на пхп, мне надо отдавать по http и отлавливать разрыв соединения на стороне сервера.
Попроси Сысоева, чтобы nginx писал в лог, сколько скачано фактически за данное соединение. Или сам патч напиши, и ему пришли.
Это рассматривается как крайний вариант...
я полагал, что раз есть прецеденты в вебе (rapidhsare.de) то должны быть и доступно простые методы решения такого рода задач без прибегания к переписыванию серверного ПО.
Это рассматривается как крайний вариант...А зря...
я полагал, что раз есть прецеденты в вебе (rapidhsare.de) то должны быть и доступно простые методы решения такого рода задач без прибегания к переписыванию серверного ПО.Серверное ПО - такое же ПО, как и которое пишешь ты. Открытые исходники и прямая связь с автором позволяют тебе его легко модицифировать и ничего стрёмного или неправильного в этом нет. Заметь, что Сысоев упорно именует nginx версией 0.x.y, а не 1.x.y. Этим он хочет сказать, что продукт пока еще динамично развивается и отнюдь не пришёл к своему логическому концу.
Это да, просто надо в таком случае разработать алгоритм записи логов, или еще куда, а не просто валить все в кучу... Т.к. потом эту кучу будет сложно распознавать. Как покрасивее сделать, не подскажите?
Проще всего писать на утилитах, но логичнее на С++, с анализом и внесением поправок в БД.
Можно ещё анализировать по мере их записи. А ещё логичнее писать в сегмент шареной памяти, но не каждый способен это быстро написать, там ведь надо семофорчики поюзать, да сделать так чтобы nginx твой в коме не оказался пока ты там расчищать будешь. В общем, решение есть, и оно простое, выбирай любое.
Кстати, патчить nginx не надо. Потому что у него apache style log и соответственно ты сам можешь настроить чтобы в лог писался объём данным отосланных в этот запрос. Но только точность этой цифры будет +/- размер send socket buffer.
если скрипт, отдающий контент, завершился успешно, а не был убит
скрипт может завершиться, а данные из буфера так никуда и не уйти
будет неточно, да, но зато очень легко реализуется
Оставить комментарий
stm7884696
Собственно есть web-сервер (apache или nginx или еще что-нить, что будет подобрано в этом треде который раздает файлы по http и весом от 100 до 300 метров за деньги. Необходимо ввести систему учета исходящего трафика для каждого клиента со списыванием нужного кол-ва средств с его счета при скачивании какого-либо файла. Проблема в том, что при обрыве связи я не знаю, как посчитать, сколько метров скачал человек уже? и сколько списать со счета?или же сколько вернуть на счет, если при получении ссылки и первоначальном запросе файла на счету блокируется сумма = цене данного файла?
В общем - что надо поставить и как реализовать схему определния нескачанного остатка файла? Или хотя бы где про это можно почитать ?
PS Из рабочих примеров видел премиум рапиды - там на каждую выданную ссылку снимается с аккаунта выдавшего ссылку число быйт, равное размеру файла, но если происходит обрыв - то недокачанный траффик возвращается на счет.