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)
[PHP] Kontrola ilości klientów
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Postów: 268
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.
- Rejestracja: dni
- Ostatnio: dni
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?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 268
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.
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
Przeciez Ci Loganek napisal. Zapisuja w bazie IP, w przypadku proby pobrania nowego pliku sprawdzaja czy IP istnieje w bazie i wypisuja komunikat.
- Rejestracja: dni
- Ostatnio: dni
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()?
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
No właśnie... Więc jedyną sensowną drogą jest obliczenie średniego czasu.
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
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).