![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam, chciałem stworzyć serwer pośredniczący w pobieraniu plików z sieci.
Problem jest taki, że aby umożliwić użytkownikowi pobranie danego zasobu, musi on zostać całkowicie pobrany na serwer. Ja chciałbym to tak zrobić, żeby użytkownik mógł rozpocząć pobieranie pliku, który jest dopiero pobierany na serwer. Zrobiłem test i jeśli plik na serwer nie został pobrany w 100% a użytkownik próbuje go pobrać z tego serwera to pobiera tylko tą część, któa w tym momencie jest na serwerze. Czy da się to zrobić tak, żeby user mógł pobrać w całości plik, który jest dopiero zapisywany na serwerze ? -------------------- |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Cytat Czy da się to zrobić tak, żeby user mógł pobrać w całości plik, który jest dopiero zapisywany na serwerze ? No a niby jak?Z pustego i Salomon nie naleje.To tak jakbyś chciał zobaczyć wynik meczu który jest strimingowany on-live. Ten post edytował Niktoś 23.07.2012, 16:49:18 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie nie wiem.
Nie jest puste, bo na serwerze jest już plik tylko nie cały i można go wysyłać, tylko pobiera się ta część, któa aktualnie jest na serwerze, ale gdyby podać błędny rozmiar pliku (jakby był cały pobrany) to chyba by poszło, tylko jak to zrobić ? -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Cytat ale gdyby podać błędny rozmiar pliku To dostaniesz w rezultacie błędny plik. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie można. Za bardzo kombinujesz. Wgraj plik na serwer i wtedy go udostępnij, do pobierania.
-------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jednak oni jakoś to robią:
http://dloader.pl/ Podając ścieżkę, do kilkuset megowego pliku pobieranie rozpoczyna się prawie że od razu z serwera pośredniczącego. Czyli mimo iż plik nie został całkowicie pobrany na serwer (bo w mgnieniu oka ten serwis nie pobierze takiego pliku) zostaje on wysyłany do użytkownika. Więc jednak się da :] -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ten serwis pobiera pliki bezpośrednio z serwera, a nie w locie. Przecież filmy nie są wgrywane cały czas od kogoś z komputera.
-------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jak to bezpośrednio ?
Pliki wysyłane są z serwera dload.pl, więc plik jest pobierany najpierw na dload (z zewnątrz) a potem wysyłany do użytkownika, nie jest pobierany bezpośrednio z zewnętrznego serwera. -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
To jest strimingowanie.Plik pobierany na serwerze musi być zawsze większy od pliku ,który użytkownik aktualnie pobiera.Kiedy użytkownik pobiera krytyczną ilość danych a serwer wciąż pobiera plik to proces dawnloadu u użytkownika zostaje zatrzymany i ponownie wznowiony, kiedy serwer uploaduje dostateczną ilość danych żeby mógł ją przesłać.Efekt jest taki ,że użytkownikowi wydaje się jakby ciągle pobierał dane, a w cale tak nie jest.
Ten post edytował Niktoś 23.07.2012, 17:07:59 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Więc w jaki sposób streamingować użytkownikowi plik, który aktualne jest pobierany na serwer ?
-------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Chyba najłatwiej byłoby to zrobić na socketach. Popatrz na biblioteki node.js.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Byłbyś w stanie coś takiego zrobić ?
-------------------- |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Raczej nie, ja programuje w c# net. Ale pewnie są tacy co by umieli.
Wynik tej funkcji należałoby przesłać po sockecie Cytat function fwrite_stream($fp, $string) { for ($written = 0; $written < strlen($string); $written += $fwrite) { $fwrite = fwrite($fp, substr($string, $written)); if ($fwrite === false) { return $written; } } return $written; } ?> Utworzyć : Cytat stream.setEncoding('utf8'); stream.addListener($written, function (line) { // Pausowanie streamingu jeśli zachodziła by ku temu potrzeba stream.pause(); // make async API call... makeAPICall(line, function() { // wznawianie streamingu stream.resume(); }); }) To taki pseudokod-może ktoś to poprawi i rozwinie:) Ten post edytował Niktoś 23.07.2012, 18:02:03 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki za pomoc, spróbuje to jakoś ogarnąć :]
-------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 16:55 |