Najlepší doplnok pre HTTP BestHttp
Best Plugin Http Besthttp
Vyberte verziu besthttp pro 1.7.8 na podporu 64-bitového spracovania IL2CPP
http://download.csdn.NET/detail/kaitiren/9120539
Jednotka sa používa na komunikáciu so serverom s cieľom použitia natívneho WWW, ale WWW neposkytuje veľa funkcií a nemôže vyhovieť mnohým potrebám. Takže môžeme protokol Http zapuzdriť tak, aby vyhovoval ďalším potrebám. Používanie protokolu Http v hrách Unity je veľmi bežné, pretože je ľahko ovládateľný, ľahko implementovateľný a často sa používa pri scenároch pristátia, ako je sťahovanie a nahrávanie niektorých zdrojov. Ak chcete implementovať ďalšiu kontrolu, musíte použiť Socket a definovať svoj vlastný protokol.
Ďalším kľúčom k použitiu tohto pluginu je platforma, ktorá sa dá implementovať pomocou vlastného nástroja HttpWebRequest v C #.
Tu je krátky úvod do HTTP a Socket:
Http pripojenie: http pripojenie je takzvané krátke pripojenie, to znamená, že klient pošle požiadavku na server, spojenie sa preruší potom, čo server odpovie pomaly, čo nie je vhodné na prenos dát v hre v reálnom čase. Množstvo údajov.
Pretože protokol HTTP aktívne uvoľňuje pripojenie po každej požiadavke, je pripojenie HTTP „krátke pripojenie“. Na udržanie online stavu klientskeho programu je potrebné neustále inicializovať požiadavku na pripojenie k serveru. Obvyklá prax je taká, že nemusíte získavať žiadne údaje naraz. Klient tiež neustále zasiela na server požiadavku „zachovať pripojenie“ každé pevne stanovené časové obdobie. Po prijatí žiadosti server odpovie klientovi, čo naznačuje, že klient je známy. Online “. Ak server nemôže dlhšiu dobu prijímať klientove požiadavky, považuje sa to za „offline“. Ak klient nemôže dlhšiu dobu dostávať odpoveď zo servera, sieť sa považuje za odpojenú.
Zásuvkové pripojenie: zásuvkové pripojenie je takzvané dlhé pripojenie. Teoreticky, akonáhle sú klient a server pripojení, nebudú aktívne odpojení, ale kvôli rôznym faktorom prostredia môže byť spojenie prerušené, napríklad: server alebo klient. Hostiteľ je nefunkčný, sieť je nefunkčná alebo medzi nimi nie je dlhodobo žiadny dátový prenos. Sieťový firewall môže odpojiť pripojenie, aby uvoľnil sieťové zdroje. Preto, keď v soktovom pripojení nedochádza k žiadnemu prenosu údajov, je potrebné odoslať správu prezenčného signálu, aby sa pripojenie udržalo. ~ Konkrétny formát správy prezenčného signálu si definuje samotný vývojár.
Rozdiel medzi pripojením Socket a pripojením HTTP nájdete na
http://www.cnblogs.com/devinzhang/archive/2012/01/13/2321826.html
http://www.xuanyusong.com/archives/1948
BestHttp je implementácia Http / 1.1 založená na RFC 2616, ktorá podporuje takmer všetky mobilné a hostiteľské platformy podporované jednotou Unity. Podrobnosti nájdete v oficiálnej dokumentácii.
Nasledujúce úvody pochádzajú hlavne z oficiálnej dokumentácie a budú obsahovať ďalšie informácie.
Cieľom BestHttp je byť ľahko použiteľným a výkonným doplnkom Unity, ktorý využíva potenciál Http / 1.1.
inštalácia:
Potrebujete presunúť adresár Plugins v adresári BestHttp do adresára Assets. Skript BestHTTPInstaller.cs v skutočnosti proces dokončí automaticky po dokončení importu. Tu používame funkciu [InitializeOnLoad], o ktorej si ešte povieme.
Je potrebné si uvedomiť, že ak je Unity nižšia ako verzia 3.5, musíte vymazať adresár WP8 v adresári Plugins.
Začnime niekoľkými základnými úvodmi:
Najskôr pridajte vyhlásenie o použití BestHttp
Získajte žiadosti
Najjednoduchší spôsob, ako požiadať server, je vytvoriť objekt HttpRequest, ktorý poskytuje konštruktoru adresu URL a funkciu spätného volania. Po vytvorení nového objektu HttpRequest nám na odoslanie žiadosti stačí zavolať funkciu Send ().
Pozrime sa na príklad:
1 HTTPRequest request = new HTTPRequest(new Uri(“https://google.com”), onRequestFinished) 2 request.Send() 3 void OnRequestFinished(HTTPRequest request, HTTPResponse response) 4 { 5 Debug.Log(“Request Finished! Text received: ” + response.DataAsText) 6 }
Funkcia spätného volania prijíma dva parametre, jeden je pôvodný objekt HTTPRequest a druhý je objekt HTTPResponse, ktorý je hostiteľom odpovede servera. Ak sa niečo pokazí, objekt HTTPResponse bude prázdny s vlastnosťou Exception, aby sa zobrazili možné chyby. Žiadosti sa vybavujú osobitne v rôznych vláknach a funkcia spätného volania sa volá v hlavnom vlákne Unity, takže nemusíme robiť žiadnu synchronizáciu vlákien.
V tomto príklade nepotrebujeme žiadne dočasné premenné.
new HTTPRequest(new Uri(“https://google.com”), (request, response) =>Debug.Log(“Finished!”)).Send()
POST POŽIADAVKY
Vyššie uvedený príklad je jednoduchá požiadavka na získanie. Ak neurčíme metódu, všetky žiadosti budú predvolene obsahovať požiadavku Získať. Konštruktor má parameter, ktorý určuje metódu požiadavky:
1 HTTPRequest request = new HTTPRequest(new Uri(“yourserver.com/posturi”), 2 HTTPMethods.Post, 3 OnRequestFinished) 4 request.AddField(“FieldName”, “Field Value”) 5 request.Send()
Ak chcete zverejniť akékoľvek údaje a nechcete nastavovať doménu, môžete použiť vlastnosť RawData.
1 HTTPRequest request = new HTTPRequest(new Uri(“yourserver.com/posturi”),HTTPMethods.Post,OnRequestFinished) 4 request.RawData = Encoding.UTF8.GetBytes('Field Value') 5 request.Send()
Okrem metód GET a POST je možné rovnakým spôsobom použiť aj iné metódy.
Ako získať stiahnuté dáta
Zvyčajne dostaneme nejaké údaje zo servera prostredníctvom žiadosti. Originálne bajtové údaje je možné získať prostredníctvom vlastnosti Data objektu HTTPResponse. Pozrime sa na príklad stiahnutia obrázka:
1 new HTTPRequest(new Uri(“http://yourserver.com/path/to/image.png”), (request, response) => 2 { 3 var tex = new Texture2D(0, 0) 4 tex.LoadImage(response.Data) 5 guiTexture.texture = tex 6 }).Send()
Existuje samozrejme kompaktnejší prístup:
new HTTPRequest(new Uri(“http://yourserver.com/path/to/image.png”), (request, response) => guiTexture.texture = response.DataAsTexture2D).Send()
Okrem DataAsTexture2D existuje aj vlastnosť DataAsText na analýzu odpovede na reťazec UTF8.
Poznámka: Všetky príklady v tomto článku nie sú skontrolované na chyby. Prosím, pridajte hodnoty nula sami do produkčného prostredia.
Môžete tiež použiť StartCoroutine na vygenerovanie HTTPRequest.
1 HTTPRequest request = new HTTPRequest(new Uri(“http://server.com”)) 2 request.Send() 3 yield return StartCoroutine(request) 4 Debug.Log(“Request finished! Downloaded Data:” + request.Response.DataAsText)
Debug.Log sa zavolá až po dokončení žiadosti.
Témy na vysokej úrovni:
Nižšie budú popísané niektoré spôsoby použitia BestHttp vo vysokom poradí.
Niektoré funkcie môžeme ľahko zapnúť alebo vypnúť pomocou konštruktora HTTPRequest. Tu sú parametre:
● methodType: Rozhodnite sa, čo sa má poslať na server. Predvolená metóda typu
je HTTPMethods.Get.
● isKeepAlive: Informuje server, že chceme, aby pripojenie tcp zostalo otvorené, aby po sebe idúce požiadavky HTTP nemuseli znova otvárať pripojenie. Ak ho necháme predvolene zapnuté, ušetrí to veľa času. Ak sme si istí, že požiadavka nebude taká častá, potom ju môžeme nastaviť na hodnotu false. Predvolená hodnota je true.
Niektoré informácie o KeepAlive:
http://www.cnblogs.com/huangfox/archive/2012/03/31/2426341.html
http://www.cnblogs.com/skynet/archive/2010/12/11/1903347.html
Nečakajte teda, že to nahradí dlhé pripojenie zásuvky.
● disableCache: Hovorí systému BestHttp, aby použil alebo nevyužil celý mechanizmus ukladania do pamäte cache. Ak je táto hodnota pravdivá, systém nebude hľadať v pamäti cache uloženú odpoveď.
a odpoveď nebude uložená do pamäte cache. Predvolená hodnota je false.
overovací systém
BestHTTP podporuje základné a overovacie overenie pomocou autentifikačného atribútu HTTPRequest:
1 using BestHTTP.Authentication 2 var request = new HTTPRequest(new Uri('https://httpbin.org/digest-auth/auth-int/usr/paswd'), (req, resp) 3 => 4 { 5 if (resp.StatusCode != 401) 6 Debug.Log('Authenticated') 7 else 8 Debug.Log('NOT Authenticated') 9 Debug.Log(resp.DataAsText) 10 }) 11 request.Credentials = new Credentials('usr', 'paswd') 12 request.Send()
Overenie nájdete na adrese:
http://blog.csdn.net/dyllove98/article/details/9255719
streamovať médiá
Funkcia spätného volania, ktorú poskytujeme pre konštruktor HTTPRequest, sa predvolene volá iba raz potom, čo server odpovedal na úplné dokončenie procesu sťahovania. Ak zvolíte tento prístup, rýchlo vyčerpáme pamäť v mobilnom zariadení a aplikácia zlyhá. Aby sa tomu zabránilo, program BestHTTP je navrhnutý tak, aby ľahko zvládol tieto problémy: stačí nastaviť príznak na hodnotu true a naša funkcia spätného volania sa zavolá po stiahnutí každého vopred určeného množstva údajov. Ak navyše nezavrieme vyrovnávaciu pamäť, stiahnutá odpoveď sa uloží do pamäte cache, aby sme mohli získať celú odpoveď z miestnej vyrovnávacej pamäte, a bez nášho kódu sa nemusíme dotýkať nášho servera. (PS: Server musí odoslať správnu hlavičku: hlavičky („Platnosť vyprší“)
hlavička:)
1 var request = new HTTPRequest(new Uri('http://yourserver.com/bigfile'), (req, resp) => 2 { 3 List fragments = resp.GetStreamedFragments() 4 // Write out the downloaded data to a file: 5 using (FileStream fs = new FileStream('pathToSave', FileMode.Append)) 6 foreach(byte[] data in fragments) 7 fs.Write(data, 0, data.Length) 8 if (resp.IsStreamingFinished) 9 Debug.Log(“Download finished!”) 10 }) 11 request.UseStreaming = true 12 request.StreamFragmentSize = 1 * 1024 * 1024 // 1 megabyte 13 request.DisableCache = true // already saving to a file, so turn off caching 14 request.Send()
Tu je krátky popis toho, čo sme robili vyššie.
1. Prepli sme príznakový bit - UseStreaming na true, takže našu funkciu spätného volania je možné volať opakovane.
2.StreamFragmentSize označuje maximálne množstvo dát, ktoré chceme uložiť do medzipamäte pred volaním funkcie spätného volania.
3. Naša funkcia spätného volania sa zavolá zakaždým, keď sa stiahne dátový blok veľkosti StreamFragmentSize, a zavolá sa znova po nastavení IsStreamingFinished na hodnotu true.
4. Ak chcete získať stiahnuté údaje, musíte zavolať funkciu GetStreamedFragments (). Jeho výsledok by sme mali uložiť do dočasnej premennej, pretože vnútorná vyrovnávacia pamäť bude po ukončení hovoru vymazaná, takže nasledujúce hovory sa vrátia na hodnotu null.
5. V tomto príklade sme vypli vyrovnávaciu pamäť, pretože sme uložili stiahnutý súbor a nechceme zaberať príliš veľa miesta.
Cache
Vyrovnávacia pamäť je tiež založená na protokole HTTP / 1.1 RFC. Na ukladanie a overovanie odpovedí využíva informácie v hlavičke. Mechanizmus ukladania do pamäte cache pracuje na pozadí, musíme sa len rozhodnúť, či ho povolíme. Ak má odpoveď v pamäti hlavičku Expires s budúcim časom, BestHTTP použije odpoveď v pamäti a nebude sa autentifikovať na serveri. To znamená, že nemusíme inicializovať žiadne pripojenia tcp. To nám umožňuje ušetriť čas, rýchlosť pripojenia a používať offline.
Aj keď je vyrovnávacia pamäť automatická, stále môžeme niektoré ovládať, alebo môžeme získať niektoré informácie pomocou niektorých verejných funkcií triedy HTTPCacheService:
● BeginClear (): Vymaže všetky pamäte cache v inom vlákne.
● BeginMaintainence (): Pomocou tejto funkcie môžeme mazať položky uložené v pamäti na základe posledného času prístupu. Vymaže položky medzipamäte, ktorých posledný čas prístupu je skôr ako zadaný čas. Pomocou tejto funkcie môžeme tiež zachovať veľkosť medzipamäte:
// Vymažte vyrovnávaciu pamäť, ktorá nebola prístupná za posledné dva týždne, a potom vymažte záznam, aby bola veľkosť vyrovnávacej pamäte zachovaná pod 50 M, počnúc najskôr.
HTTPCacheService.BeginMaintainence (nový HTTPCacheMaintananceParams (TimeSpan.FromDays (14),
50 * 1024 * 1024))
● GetCacheSize (): Vráti veľkosť pamäte cache, reprezentáciu bajtov
● GetCacheEntryCount (): Vráti počet záznamov uložených v pamäti cache. Priemerná veľkosť položky v pamäti cache sa dá vypočítať ako float avgSize = GetCacheSize () / (float) GetCacheEntryCount ().