ast-ross
Новичок
Как вычислить номер потока при мультисессионной скачке файла
Народ, все перерыл! Ну нет ответа, нет!
В общем пишу скрипт отдачи пользователю файла в поддержкой мультипоточности, докачки и прочего... Вобщем все уже в принципе написанно. Однако вот такая вот проблема, хочу сделать ограничение по потокам.
Есть таблица в sql - stream_control поля:
user_ip, file_id, stream
Алгоритм такой:
пришел запрос где указан наш ид файла:
пример
http://localhost/getfile.php?file_id=7
Так вот, суть в том, что если не использовать переменную $stream и запустить качалку типа flash get, все (допустим 5 потоков) обратятся к скрипту одновременно. Следовательно ни одной записи еще в базе не будет и условие if сработает как true, и в базу запишется все 5 потоков и начнется выдача по всем 5 потокам. Однако если идентифицировать поток, то для каждого потока перед выборкой будет задержка в секундах = номеру его потока, следовательно предыдущий поток сработает на 1 сек. раньше и успеет добавить запись о себе в базу.
Вопрос, как из заголовков выдернуть номер потока. Или вычислить его, имея Content-Range, вобщем я и так и сяк и вобщем то никак... Помогите кто чем может
Может мой подход вообще в корне не верный? Покритикуйте или подскажите как надо...
Народ, все перерыл! Ну нет ответа, нет!
В общем пишу скрипт отдачи пользователю файла в поддержкой мультипоточности, докачки и прочего... Вобщем все уже в принципе написанно. Однако вот такая вот проблема, хочу сделать ограничение по потокам.
Есть таблица в sql - stream_control поля:
user_ip, file_id, stream
Алгоритм такой:
пришел запрос где указан наш ид файла:
пример
http://localhost/getfile.php?file_id=7
PHP:
<?
$limit=3; // максимальное кол-во потоков
$stream=? // вот как раз номер потока мне и надо знать, далее все станет ясно.
sleep($stream);
//делаем выборку из таблицы:
$check_limit=mysql_query("select * from stream_control where user_ip='".$_SERVER['REMOTE_ADDR']."' and file_id='".$_GET['file_id']."'");
if (mysql_num_rows($check_limit)<$limit) {
mysql_query("INSERT INTO stream_control (user_ip, file_id, stream) VALUES ('".$_SERVER['REMOTE_ADDR']."', '".$_GET['file_id']."', '".$stream."' )");
//-------- выдеам файл порциями в цикле...
// цикл
// ...
}
else {
// error 403 посылаем заголовки типа доступ запрещен.
}
Вопрос, как из заголовков выдернуть номер потока. Или вычислить его, имея Content-Range, вобщем я и так и сяк и вобщем то никак... Помогите кто чем может
Может мой подход вообще в корне не верный? Покритикуйте или подскажите как надо...