Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przerwanie otwartego połączenia z serwerem
Forum PHP.pl > Forum > Przedszkole
wree
Witam

Spędziłem ostatnie 2 godziny szukając funkcji która przerwie nawiązane połączenie z serwerem. Mam skrypt w którym użytkownik nawiązuje połączenie z plikiem video na serwerze. Włączenie video jest rejestrowane w bazie danych. Chcę zrobić tak, że gdy włączy inne video na stronie to połączenie z tamtego video zostanie przerwane. Pozwoli mi to uchronić serwer przed programami do ściągania video z czym mam ostatnio problem. Osoba wchodzi włącza taki program, włącza 10-15 video i ten program ściąga je naraz.

Dzięki przerwaniu połączenia osoba nie będzie w stanie ściągać pliku po próbie oglądania innego video ponieważ inny link do video zostanie zapisany do bazy. Podczas porównywania linku z bazy z tym co osoba chce zobaczyć właśnie chcę przerwać nawiązane połączenie do tego ostatniego video. Znalazłem tylko http://php.net/manual/pl/features.connection-handling.php ale to tylko zwraca status połączenia, ignore_user_abort ignoruje zerwanie połączenia. Nigdzie nie mogę znaleźć jak zerwać połączenie, die; nie ubija wcześniej nawiązanego połączenia. Proszę o nakierowanie mnie na coś sensownego.

Pozdrawiam
by_ikar
Tylko po co zamykać połączenie, jak wystarczy że wszystkie pliki które pobiera użytkownik, wcześniej przechodzą przez skrypt, który podczas pobierania będzie sprawdzał czy dana osoba pobiera już plik. Niepotrzebnie sobie komplikujesz sprawę. Zrób skrypt który ci będzie pobierać i wysyłać do użytkownika dany plik (od razu uprzedzam, żebyś odpuścił read). Dzięki temu zarówno będziesz mógł kontrolować co kto pobiera, jak i z jaką prędkością wink.gif jak nie wiesz jak się zabrać za coś takiego, najlepiej poszukaj już gotowych rozwiązań, tutaj na forum jest taki temat: http://forum.php.pl/index.php?showtopic=140280
wree
Dzięki za odpowiedź.

Połączenie chcę zamknąć aby można było streamingować tylko 1 video dla 1 użytkownika naraz. Nie zezwalam na ściąganie plików video na tym serwerze. Osoby ściągają te pliki poprzez programy do pobierania plików, które w przeglądarce wyszukują bezpośrednie połączenie do pliku i dzięki temu tworzy się kolejne 2 połączenie dla tego pliku. Użytkownik wtedy włącza kolejne video i ten program łapie 2 link... w przeciągu 2 minut program łapie 15 takich linków i użytkownik pobiera je naraz.

Na razie ustawiłem w sesji, że jak odpali jeden to, przy kolejnej próbie połączenia link dostaje bana ale pierwsze połączenie żyje, także video leci. Tylko musiałem wyłączyć przewijanie video bo przy kliknięciu na pasek przewijania skrypt musi się ponownie połączyć z video i znaleźć tą część, którą ma wyświetlić. Także mało satysfakcjonujące rozwiązanie.

Nie chcę ograniczać userom transferu bo niektóre video są w hd. Sam niekoniecznie przepadam za takimi ograniczeniami, mam szybkie łącze to dlaczego nie miałbym mieć z tego benefitów.

Chcę aby user mógł naraz posiadać 1 połączenie z 1 plikiem. Link, który podałeś jest do ograniczenia transferu. Masz pomysł jak sprawić by użytkownik mógł łączyć się tylko z 1 plikiem video? napisałeś:
Cytat
przechodzą przez skrypt, który podczas pobierania będzie sprawdzał czy dana osoba pobiera już plik


no dokładnie takie coś chcę. Tylko dla streamingu. Jak sprawdzić czy dana osoba nadal ogląda video?
by_ikar
No właśnie to ograniczenie transferu, po drobnej modyfikacji będzie ci ograniczać również dostęp do pliku. Każdy jeden plik nie może ci się pobierać bezpośrednio, bez użycia php, tylko właśnie wyłącznie przy użyciu php, wtedy masz kontrole nad tym kto pobiera, z jaką prędkością pobiera (jeżeli chcesz) i ile plików jednocześnie pobiera. Można jeszcze bawić się w jakieś moduły apache do ograniczania ilości połączeń, tylko nie wiem po co wink.gif

Nie wiem jak miałbym ci to prościej wytłumaczyć, robisz sobie skrypt który pośredniczy podczas pobierania pliku, zanim plik wyślesz do użytkownika, sprawdzisz czy już jakiegoś nie pobiera. Jeżeli pobiera walisz mu komunikatem po oczach, żeby nie pobierał więcej niż 1 plik jednocześnie. Tutaj masz temat: http://forum.php.pl/index.php?showtopic=112967 w którym masz opisane jak pobierać pliki (streaming) za pomocą php, wrzuć gdzieś przed pobieraniem sprawdzanie czy już pobiera, następnie dodaj sesji/bazy/gdziekolwiek informacje że pobiera a następnie wyślij taki plik userowi. Ot cała filozofia tak pokrótce. Tyle że nie używaj readfile bo przy większych plikach niestety wymięknie. Tutaj masz kolejny link: http://4programmers.net/Php/Pobieranie_pli...%82%C4%85czenia i ogólnie polecam poszukać, bo jest tyle wpisów na ten temat na różnych stronach że nie ma sensu jeszcze raz o tym pisać.
wree
Cytat
Tutaj masz temat: http://forum.php.pl/index.php?showtopic=112967 w którym masz opisane jak pobierać pliki (streaming) za pomocą php, wrzuć gdzieś przed pobieraniem sprawdzanie czy już pobiera, następnie dodaj sesji/bazy/gdziekolwiek informacje że pobiera a następnie wyślij taki plik userowi.


Dzięki za linki, mam takie zabezpieczenie jak pisałeś że przez skrypt leci przed włączeniem filmu, sprawdza itd... to dość proste. Po kilku dniach pracy z takim rozwiązaniem doszedłem do wniosku, że nadal potrzebuję funkcje do zerwania połączenia. Ponieważ ktoś włącza film a zaraz potem włącza kolejny i kolejny... i wszystkie są włączone. Mam ogranicznik czasowy do tego ile naraz można video włączyć ale to złe rozwiązanie.

Potrzebuję tak jak pisałem w pierwszym poście, coś co zerwie połączenie z serwerem. Mam ciekawy koncept jak to zastosować, tylko nie mogę znaleźć takiej funkcji. Istnieje coś takiego? Szukałem w sieci, wszędzie jest o podtrzymaniu połączenia a nie o zerwaniu. Istnieje masa rzeczy o tym jak podtrzymać połączenie ale nic sensownego na temat zrywania połączenia.

Nie potrzebuję gotowego rozwiązania, potrzeba mi tylko coś co zerwie ostatnio nawiązane połączenie z serwerem po nawiązaniu nowego połączenia przez usera.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.