Video: Сокетный Клиент-Сервер на C# (November 2024)
Jednou z vecí, ktoré som za posledné mesiace považoval za zaujímavé vo svete vývoja, je to, ako moderné aplikácie prechádzajú späť k umiestňovaniu väčšej inteligencie do klienta namiesto servera. Model klient-server samozrejme nie je ničím novým: je to spôsob, akým sa tradičné aplikácie vyvíjali roky, pričom bohaté klientske aplikácie hovorili s aplikáciami na strane servera. Ale v ére webu a dokonca aj webu 2.0 sa zameranie presunulo na webové aplikácie, v ktorých bola veľká časť inteligencie na webovom serveri (zvyčajne v aplikačných serveroch založených na Java) a klient bol iba jednoduchá webová stránka v prehliadač, v ktorom ste zakaždým, keď ste klikli, načítali novú stránku.
Nedávno však maturácia HTML5, CSS a predovšetkým JavaScript vedie vývojárov k tomu, aby reálnu inteligenciu a skutočné spracovanie umiestnili na samotnú webovú stránku. Predovšetkým sme videli nárast rôznych rámcov založených na JavaScripte na strane klienta, ktoré uľahčujú vytváranie inteligentných klientskych rozhraní, ktoré bežia úplne v modernom webovom prehliadači. Zúčastnené prehliadače sú zvyčajne tie, ktoré sú založené na nástroji Webkit vrátane prehliadača Chrome a Safari, ale zdá sa, že väčšina aplikácií funguje dobre aj v súčasných verziách prehliadača Firefox a Internet Explorer. Skončíte s komplexnejšou webovou stránkou, ktorá sa dynamicky mení a podľa potreby sťahuje údaje zo servera.
Najviac pozornosti sa javia najmä tri rámce MVC: Backbone.js, Ember.js a Angular.js. (MVC je skratka pre model-view-controller - v podstate je to architektúra, ktorá stojí za výpočtom webového klienta. „Js“ je skratka pre JavaScript.) V podstate je to všetko vyrastanie prístupu AJAX (asynchrónny JavaScript a XML), ktorý bol v posledných desiatich rokoch populárny alebo áno, ale omnoho zrelšie a takmer štandardizované. Cieľom je vložiť do prehliadača viac informácií o stave a inteligencii, potom sa prehliadač musí spojiť s rozhraním REST API na strane servera.
Chrbtica je pravdepodobne najzákladnejšia a minimálna z týchto rámcov; používa sa v rôznom rozsahu na mnohých populárnych stránkach. Ember vyrástol z rámca s názvom Sproutcore, ktorý podporovala spoločnosť Apple, a je oveľa komplexnejším rámcom navrhnutým na vykonávanie aplikácií v štýle stolných počítačov. Často sa používa s programom Bootstrap - sada šablón pre HTML a CSS, ktoré pôvodne vytvorili zamestnanci služby Twitter. Uhlová je alternatívou spoločnosti Google, ktorá sa zdá byť niekde medzi nimi - niektorí ľudia si myslia, že je o niečo flexibilnejšia alebo aspoň „menej názorná“ ako spoločnosť Ember, ale komplexnejšia ako chrbtica. (Poznámka: Google tlačí vývojárov, aby používali Angular na zlepšenie kvality kódovania, ale interne vlastne používa inú, proprietárnu sadu rámcov.) Dokonca aj Microsoft pridal do Visual Studio pre tieto rámce háčiky.
Keďže ide o web, existuje niekoľko alternatív. Jeden z najzaujímavejších, o ktorom som v poslednej dobe počul, je Meteor, navrhnutý pre prácu s JavaScriptom na strane klienta aj servera. Je to však ešte veľmi skoro a ešte neviem o žiadnych skutočných užívateľoch. Medzičasom si vývojári hrajú s programom Node.js, ktorý sa často používa na implementáciu skriptov JavaScript na strane servera.
Výhoda takýchto rámcov sa zdá byť jasná. Bohaté aplikácie webového klienta sú výkonnejšie ako tenké klientske aplikácie, v ktorých všetko beží na serveri, môžu poskytovať lepšie používateľské rozhranie a ponúka možnosť offline informácií. Pomocou týchto rámcov môžete vytvárať bohaté webové klientske aplikácie oveľa rýchlejšie, ako by ste mohli, vytvorením všetkého od nuly a využitím výhod komunít vyvíjajúcich sa okolo každej z nich.
Najdôležitejšie je, že môžete vytvárať mobilné aplikácie, ktoré sa prispôsobujú rôznym zariadeniam bez toho, aby ste museli písať konkrétne natívne aplikácie. Stále existuje dobrý argument, ktorý je potrebné urobiť pre natívne aplikácie, ktoré môžu priamejšie riešiť konkrétne vlastnosti každej platformy. Mnoho vývojárov však zistilo, že takéto rámce môžu dramaticky urýchliť vývoj naprieč platformami, najmä ak sa používajú v spojení s vecami, ako je napríklad PhoneGap, mobilný rámec s otvoreným zdrojovým kódom zakúpený spoločnosťou Adobe a otvorený zdroj v projekte Apache Cordova.
Mobil samozrejme prináša svoje vlastné obmedzenia, vrátane rýchlosti procesorov a možno ešte dôležitejšie je, že rýchlosť - a niekedy aj nedostatok - konektivity. Jedným z dôvodov, prečo ľudia majú radi aplikácie na webových stránkach, je to, že často si môžete stiahnuť základnú funkčnosť cez Wi-Fi alebo rýchle pripojenie a jednoducho si stiahnuť potrebné údaje, nie celý dizajn. Balíky ako PhoneGap tento problém riešia vložením skriptu JavaScript do stiahnutej aplikácie.
S takýmito rámcami však existujú ďalšie problémy. Definíciou väčšieho množstva výpočtov na strane klienta sa zvyšuje zložitosť v porovnaní s jednoduchou aplikáciou iba pre server a skutočne sa niektoré z nedostatkov starého modelu klient-server vracajú. Vývojári musia riadiť štát na oboch stranách. Kód na dvoch miestach znamená, že sa musíte zamerať na bezpečnosť na oboch miestach. Keďže vývojový tím často pracuje na klientovi a na serveri niektorí ľudia, máte ďalšie problémy s komunikáciou. Na druhej strane sa niektoré zo starších problémov klient-server nevrátia a namiesto toho si ponecháte výhody webového softvéru. Toto je svet, ktorý je oveľa viac zameraný na normy a ktorý je založený na komunite, takže nie ste tak závislí od jediného proprietárneho prostredia. Rozdelením častí na strane klienta a na strane servera môžete mať čistejšiu a jednoduchšiu implementáciu na strane servera, ktorá iba spracúva a nie používateľské rozhranie, a v dôsledku toho môže vyžadovať menej prostriedkov. Stále máte výhodu v tom, že dokážete aktualizovať všetkých klientov naraz, pretože prehliadač zvyčajne načíta kód zo servera pri spustení aplikácie.
Jasne vidíme posun smerom k inteligentnejším webovým klientom - nie v každom prípade, ale v mnohých nových aplikáciách. Je oveľa ťažšie brať staršie aplikácie a presúvať ich do tohto modelu, ale niektoré z nich tiež vidíme. Nie je to celkom starý model klient-server, ale je to stále bližšie.