[PHP] Kontrola ilości klientów

0

Witam!
Projektuję ogromny system downloadu. Chcę wprowadzić dla użytkowników no-premium pewne ograniczenie. Mianowicie że jeden plik może pobierać tylko 10 userów no-premium a inni muszą poczekać aż któryś z nich skończy w kolejce (tak jak na WP). Jak skontrolować ile osób w danym momencie pobiera plik? (Mam do dyspozycji dedyka)

0

zapisać rozpoczęcie ściągania, obliczyć ile się plik będzie średnio ściągał i na tenokres czasu powiększyć zmienną o jeden. Czas się skończy - pomniejszasz.

0

Może i tak... Ale mnie kręcą bardziej pr0 rozwiązania. Jak oni to robią np. na Rapidzie że nie możesz pobierać 2 plików na raz z jednego IP?

0

to proste, zapisują do bazy danych twoje ip, trzymają je przez jakiś tam czas(nie wiem ile, bo ja mam neo i zawsze sie rozłączam, chyba 90 min?), no a po upływie tego czasu usuwa się rekord. Czy ja wiem czy to takie pr0 rozwiązanie? Kilka(może kilkanaście) minut kodzenia i gotowe.

0

Ale mi chodzi o to jak oni to robią że nie możesz pobierać 2 plików jednocześnie. Do momentu kiedy pobiera się plik masz: "Your IP is already downloading a file.". O to mi chodzi. Rozwiązanie tego problemu byłoby rozwiązaniem wszystkich problemów.

0

Przeciez Ci Loganek napisal. Zapisuja w bazie IP, w przypadku proby pobrania nowego pliku sprawdzaja czy IP istnieje w bazie i wypisuja komunikat.

0

Tylko jak oni je usuwają? PHP czyta plik przez ReadFile() i od razu przechodzi do kolejnej komendy, a nie czeka aż user pobierze plik. Może zrobić z fread()?

0

Nie da sie poczekac az user pobierze plik :P Zwracasz tresc pliku jako odpowiedz na żądanie o strone zmieniajac po drodze naglowki, tak zeby przegladarka rozpoznala, ze to plik, a nie np. html.

Mozesz sprobowac czy skrypt po przeslaniu pliku idzie dalej w tym samym momencie, w ktorym uzytkownik skonczyl go sciagac. Ale wydaje mi sie, ze po drodze jest pare buforow i skrypt duzo wczesniej skonczy 'wypisywanie' pliku niz uzytkownik go otrzyma.

0

No właśnie... Więc jedyną sensowną drogą jest obliczenie średniego czasu.

0

Nie do konca. Przy non-premium limit wysylania jest okreslony, stad latwo wyliczyc ile zajmie sciaganie pliku na 'max' obrotach. Wtedy wiesz, kiedy najwczesniej ktos skonczy go sciagac i taki ustawiasz limit czasu.

0

najlepiej do tego zadania użyć crona;)

0

Cały czas zakładacie że serwis stoi na PHP. Używając np perla przez CGI prawdopodobnie można dokładniej kontrolować kiedy użytkownik zakończy ściąganie (disconnect). Podobnie serwery FTP pozwalają na limitowanie zarówno ilości jednoczesnych połączeń.

W PHP zresztą są funkcje pozwalające na wykrycie przerwania połączenia przez klienta (np. connection_status).

1 użytkowników online, w tym zalogowanych: 0, gości: 1