Jak to robią akceleratory pobierania...

Odpowiedz Nowy wątek
2006-09-27 17:46
0

Witam, nie jestem pewien czy to odpowiedni dział bo moje pytanie dotyczy po trochu programowania, ale tylko w czysto teoretycznej postaci.... kiedyś zastanawiałem się nad tym jak działają akceleratory pobierania plików z internetu (np: FlashGet)... doszedłem do takich wniosków że musi to być coś na zasadzie, że gdy rozpoczynane jest pobieranie plików tworzone są oddzielne wątki i kazdy z osobna pobiera sobie jakąś część pliku... nie jestem pewien co do mojej teori, ale jeśli tak jest to zastanawia mnie jedno, wpadłem na ten problem gdy sam chciałem napisać taki prosty akcelerator, sytuacja może wyglądać tak, użytkownik sobie klika na link na stronie... otwiera się powiedzmy FlashGet (zastanawia mnie też to jak on to robi że wykrywa kliknięcie w likn w IE ;) ) no i zaczyna się pobieranie...tworzy powiedzmy 10 wątków każdy wątek wysyła do serwera prośbę o jakiś kawałek pliku i zaczyna się transfer... ale teraz przyjżyjmy się temu transferowi powiedzmy pobieramy plik 100KB więc każdy wątek pobiera tylko po 10KB no, powiedzmy że serwer przesyła to pakietami po 1KB (wiem że tak nie jest ale to tylko tak teoretycznie) no to serwer wysyła sobie najpierw 1-szy KB potem 10-ty KB następnie 20-ty KB i tak dalej aż do 90-tego KB...i zaczyna od poczatku 2,11,21,22 itd... no ale te pakiety z danej serii przecież nie idą koło siebie tylko jeden za drugim jeśli można to tak nazwać... do tego warstwa TCP\IP ma to do siebie że czasami pakiety giną a czasami jeden dochodzi szybciej niż drugi więc gubiona jest kolejność... i teraz wreszcie dotarłem do meritum moich przemyśleń i do pytania :D W jaki sposób może to być rozwiązane że każdy wątek wie który pakiet należy do niego i który ma odebrać i zapisać??

Ciekaw jestem czy ktoś w ogóle mnie zrozumiał i jest wstanie odpowiedzieć :)

Pozdrawiam

Pozostało 580 znaków

2006-09-27 18:23
nav
0

Każdy wątek tworzy osobne połączenie i odbiera dane z innego socketa.


utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2006-09-27 18:45
0

W odroznieniu od UDP, TCP musi dojsc "w calosci". Zapewnia wiarygodne polaczenie poniewaz po wyslaniu pakietu "komputer" czeka na odpowiedz iz takowy zostal odebrany prawidlowo (do tego dochodza sumy kontrolne) musi byc elegancko i cacy.

Mnie ciekawi co innego: jak te programy rzeczywiscie wplywaja na szybkosc pobierania. Poniewaz mam limit transferu (jak wiekszosc) i nie moge sciagac szybciej niz 38 kB/s. Teraz co z tego jezeli program bedzie pobieral plik z predkoscia 38 kB/s czy podzieli go na 4 czesci i kazda czesc bedzie pobieral z predkoscia 9,5 kB/s? :]

Pozostało 580 znaków

2006-09-27 21:48
0

W twoim przykladzie nic sie nie zmiania. Programy tego typu wykorzystuje sie przy serwerach ktore maja ograniczony transfer dla 1 polaczenia. Przykladowo jakis serwis pozwala na wysylanie tylko 12KB/polaczenie, w tym momencie odpalamy 10 watkow i juz mamy 120KB/sec i ktos z 1Mb lacza moze to w pelni wykorzystac.

Pozostało 580 znaków

2006-09-28 08:34
0

w flashgetcie masz dokładnie wszystko przedstawione, widzisz ile połączeń zostało ustanowionych i dokładnie jakie nagłówki zostały wysłane / odebrane

Takie programy nie przyspieszają praktycznie nigdy pobierania, chyba że na serwerze jest limit uploadu na jedno połączenie, lub masz większy transfer download niż serwer upload, wtedy zwłaszcza użycie mirrorów bardzo przyspiesza pobieranie
Ale są też programy ściągające jakby swoim "protokołem" - one jakoś chyba pakują jeszcze dane dodatkowo na serwerze a w programie jest pokazywany transfer względem danych nie spakowanych czyli trochę oszukany


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-09-28 23:44
0

Nie trzeba do tego "swojego protokołu" - każdy najbardziej przeciętny serwer HTTP ma wsparcie dla kompresji wysyłanych danych. Więc jeśli klient to obsłuźy, wówczas nie stanowi problemu redukcja ilości koniecznych do ściągnięcia danych (o ile zależy w dużej mierze od rodzaju danych).

FlashGet przykładowo jak najbardziej działa - na swój sposób. Praktyka pokazuje, że obciążone łącza dzielą się "po równo" dla każdego połączenia. Więc jeśli ani serwer nie ma dużego ograniczenia transferu, ani Ty, wówczas przy zapchanych łączach ściąganie w kilku wątkach i otwartych połączeniach przyspiesza efektywne ściąganie. Jeśli jednak masz to przykładowe ograniczenie 38 kB/s i z takim speedem Ci śmiga z przeglądarki, to więcej z łącza nie wyciągniesz. Bo to ograniczenie nie jest narzucane na pojedyncze połączenie, a na cały transfer do/z Twojego komputera razem wzięty.

Dodatkową zaletą tego typu programów jest bardzo często bardziej wyspecjalizowana obsługa protokołu. Dzięki temu można uzyskać takie "ficzery" jak wznawianie ściągania po restarcie itp.


Grunt to uziemienie...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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