Asynchronní operace
Doba, po kterou aplikace potřebuje přístup k internetovému prostředku, závisí na řadě faktorů, například na používaném připojení, na serveru, na kterém se prostředek nachází, a na počtu uživatelů, kteří se pokoušejí získat přístup k prostředku. U aplikací, které stahují více prostředků nebo zpracovávají více úkolů (včetně jednoho nebo více stahování), může být čekání na dokončení každého stažení před přechodem na další úlohu extrémně neefektivní. Aby se snížila doba, po kterou aplikace musí čekat, může mnoho funkcí WinINet pracovat asynchronně.
V asynchronním režimu může aplikace spustit libovolnou funkci, která obsahuje kontextovou hodnotu jako jeden ze svých parametrů, a může pokračovat v provádění jiných příkazů nebo funkcí, zatímco aplikace čeká na dokončení úlohy funkce. Během dokončení úkolu je funkce zpětného volání stavu poskytovaná aplikací upozorněna na průběh úkolu a po jeho dokončení. V tuto chvíli může funkce zpětného volání stavu volat jiné funkce nebo provádět jiné požadované úlohy, které byly závislé na dokončení úkolu.
Při asynchronním volání WinINet neexistuje žádná afinita zpětného volání: Volání může začínat z jednoho vlákna, ale jakékoli jiné vlákno může přijmout zpětné volání.
Výhody
Asynchronní provoz má několik výhod. Například:
Stahování více internetových prostředků současně.
Můžete se připojit k více internetovým prostředkům najednou a stáhnout je, jakmile budou dostupné.
Zvýšení výkonu aplikace
Aplikace používající funkce WinINet asynchronně nemusí čekat na dokončení požadavku, takže aplikace může provádět další úlohy, které nejsou závislé na požadavku, a tím zlepšit celkový výkon aplikace.
Sledujte průběh stahování.
Funkce zpětného volání stavu obdrží oznámení, když zpracovává požadavek. V případě potřeby může vaše aplikace používat informace poskytované funkcí zpětného volání stavu k tomu, aby byl uživatel informován o průběhu operace nebo aby přerušil požadavky, které trvá příliš dlouho.
Scénáře
Řekněme, že vaše aplikace potřebuje stáhnout ceny kávy z downfall Coffee & Čaj a čtvrté kávové stránky a porovnat ceny. Web Fourth Coffee obvykle má pomalejší dobu odezvy, takže aplikace by měla nejprve stáhnout informace z Downfall Coffee & Čaj.
Vyvíjí se dvě verze aplikace. Jeden funguje synchronně, nejprve stahuje ceny z downfall Coffee & čaj a pak ceny z webu Fourth Coffee. Druhý funguje asynchronně, odesílá požadavky na weby a stahuje ceny, jakmile budou dostupné.
Následující tabulka ukazuje, co by se stalo, kdyby byl web Fourth Coffee v určitém dni rychlejší.
Událost | Synchronní verze | Asynchronní verze |
---|---|---|
Začínat | Odeslat požadavek na downfall Coffee & čaj | Odeslání požadavků na downfall Coffee & čaj a čtvrtá káva |
Požadavek z asynchronní verze na dokončenou čtvrtou kávu | Čekání | Stáhnout ceny od Fourth Coffee |
Žádost o ukončení kávy & čaj byl dokončen | Stáhnout ceny z Downfall Coffee & Čaj | Stáhnout ceny z Downfall Coffee & Čaj |
Po downfall Coffee & Čaj ceny se stáhnou | Odeslání požadavku na čtvrtou kávu | Porovnání cen |
Porovnání asynchronní verze bylo dokončeno. | Čekání | Operace byla dokončena. |
Žádost z synchronní verze na dokončenou čtvrtou kávu | Stáhnout ceny od Fourth Coffee | není k dispozici |
Po stažení cen čtvrté kávy | Porovnání cen | není k dispozici |
Dokončené porovnání synchronní verze | Operace byla dokončena. | není k dispozici |
Dalším příkladem by byl webový prohlížeč, například Microsoft Internet Explorer. Když prohlížeč stáhne stránku, často potřebuje stáhnout další prostředky, jako jsou obrázky a zvukové soubory. V asynchronním režimu může být stránka a související prostředky požadovány současně a stahovány, jakmile budou k dispozici, místo vyžádání a stažení stránky a jednotlivých prostředků po jednom.
Související témata
Tady jsou související odkazy.
Cvičení
Funkce potřebné k nastavení asynchronní operace
- InternetOpen
- InternetSetStatusCallback
Funkce, které je možné použít asynchronně
- FtpCreateDirectory
- ftpDeleteFile
- FtpFindFirstFile
- ftpGetCurrentDirectory
- ftpgetfile
- ftpopenfile
- FtpPutFile
- ftpRemoveDirectory
- ftpRenameFile
- ftpSetCurrentDirectory
- GopherFindFirstFile
- GopherOpenFile
- httpEndRequest
- httpOpenRequest
- httpSendRequestEx
- InternetConnect
- InternetOpenUrl
- InternetReadFileEx
Poznámka
FtpCreateDirectory, FtpRemoveDirectory, FtpSetCurrentDirectory, FtpGetCurrentDirectory, FtpDeleteFilea FtpRenameFile používají kontextovou hodnotu zadanou ve volání funkce InternetConnect.
Poznámka
WinINet nepodporuje implementace serveru. Kromě toho by se nemělo používat ze služby. Pro implementace serverů nebo služby použijte microsoft Windows HTTP Services (WinHTTP).