A WebSocket számos modern webalkalmazás szerves része. Ha kódot ír az internetre, valószínűleg hallotta már ezt a kifejezést, de talán nem tudja pontosan, mi az, vagy hogyan kell használni. Szerencsére a WebSocket nem egy bonyolult fogalom, és elég gyorsan meg lehet érteni vele az alapvető ismereteket.

Mi az a WebSocket?

A WebSocket sajnos egyike azoknak a neveknek, amelyek első pillantásra nem tűnnek értelmesnek. A WebSocket valójában a neve kommunikációs protokoll amely lehetővé teszi a kétirányú kommunikációt a kliens és a webszerver között.

Egyszerűbben fogalmazva, a WebSocket egy olyan technológia, amely lehetővé teszi a kliens és a szerver számára, hogy kapcsolatot hozzon létre, ahol bármelyik fél bármikor üzenetet küldhet a másiknak.

Ez eltér a szokásos HTTP kapcsolattól, ahol a kliensnek kell kezdeményeznie egy kérést, és a szerver csak ezután küldhet választ. Valójában a WebSocket egy teljesen más kommunikációs protokoll, mint a HTTP, amelyet HTTP-kompatibilisnek terveztek. Ha egy ügyfélalkalmazás WebSocket kapcsolatot kíván kezdeményezni, akkor használnia kell a

instagram viewer
HTTP frissítési mechanizmus hogy váltson a WebSocket protokollra.

Ezen a ponton azt gondolhatja: "a protokoll csak egy szabálykészlet, hogyan használhatja ezt a kódoláshoz?".

A hiányzó darab az úgynevezett a protokoll verem. Lényegében a protokollt támogató eszközök beépített hardverrel és szoftverrel rendelkeznek, amelyek lehetővé teszik a protokoll használatával kommunikáló alkalmazások írását. A protokollt közvetlenül nem használják semmi felépítésére.

Miért jött létre a WebSocket?

A WebSocket szükségességének szemléltetéséhez vegye figyelembe az internetes csevegés mögött meghúzódó mechanizmust.

Valaki üzenetet küld a csevegőszervernek az eszközéről, de a szervernek továbbra is el kell küldenie az üzenetet az Ön eszközére, mielőtt elolvashatja. Ha a szerver HTTP-t használ, a szerver nem tudja közvetlenül továbbítani az üzenetet Önnek, mert a szerver nem tud kéréseket kezdeményezni.

A HTTP-vel több módon is megoldható ez a probléma. Az egyik módja az, hogy a kliens folyamatosan frissítési kéréseket küld a szervernek, és a szerver továbbítja a válaszban szereplő adatokat. Ezt a technikát lekérdezésnek nevezik, és minden kérést lekérdezésnek neveznek. A szavazásnak két változata van: hosszú lekérdezés és rövid szavazás.

A hosszú lekérdezési változat használata azt jelenti, hogy a kliens eszköz folyamatosan megkérdezi a szervert, hogy elérhetők-e új üzenetek. Ha új üzenetek állnak rendelkezésre, a szerver válaszként elküldi az üzeneteket. Ha nem, a kiszolgáló késlelteti a választ, és nyitva tartja a kapcsolatot, amíg nincs visszaküldendő adat, majd a kliens azonnal új kérést küld.

Ez a technika nem hatékony, mert a HTTP-t nem úgy tervezték, hogy így használják. Kis léptékben megfelelően működik, de minden HTTP-kérelem extra adatok küldésével jár fejléc, és ez jelentősen megnöveli a szerver terhelését, amikor sok kliens lekérdez azt.

Íme egy diagram, amely a hosszú szavazást illusztrálja:

A rövid lekérdezési változat még kevésbé hatékony. Rövid lekérdezés esetén a szerver nem tartja nyitva a kapcsolatot, amíg új adatok nem érkeznek, vagyis az ügyfélnek fix, nagyon rövid időközönként kell lekérdeznie a szervert.

A kétirányú kommunikáció másik technikáját a HTTP-ben streamingnek nevezik.

A streaming során az első kérés elküldése után a szerver korlátlan ideig nyitva tartja a kapcsolatot, folyamatos részválaszként újabb információkat küldve a kliensnek.

A streaming használata kisebb adatterhelést és szerverterhelést eredményez, mint a lekérdezés, mivel ideális esetben a kliens csak egy HTTP-kérést küld. Sajnos a streamelés bizonyos körülmények között problémákat okoz, mivel a böngészők és a hálózati közvetítők (például a proxy) gyakran megpróbálják kezelni a részleges válaszok egyetlen nagy HTTP-válasz töredékeiként (ami normális HTTP-viselkedés), nem pedig külön üzenetként lenni.

A WebSocket ezen problémák megoldására jött létre. A HTTP-vel ellentétben a WebSocket kifejezetten kétirányú kommunikációra készült. A WebSocket segítségével a kapcsolat megnyitása után a kliens és a kiszolgáló oda-vissza küldhet üzeneteket lekérdezés vagy streaming probléma nélkül.

Használja a WebSocket eseteit

A WebSocket nagyszerű, de ez nem jelenti azt, hogy mindenhol használni kell.

A WebSocket megvalósítása bonyolultabbá teheti az alkalmazást, különösen a szerver oldalon, ezért ezt nem szabad megtenni, hacsak nincs jó oka. Ez felveti a kérdést: hogyan néz ki a jó ok?

A WebSocket ideális olyan esetekben, amikor alacsony késleltetés mellett gyakori kétirányú kommunikációra van szükség. Más szóval, a WebSocket előnyt biztosít azon alkalmazások számára, amelyeknek gyakran vagy nagy léptékű kommunikációra van szükségük. Ha a kommunikációnak nem kell valós idejűnek lennie, vagy az alkalmazás soha nem fog nagy léptékűvé válni, a lekérdezés vagy a streamelés elegendő lehet az alkalmazásban való használatra.

A WebSocket tipikus felhasználási területei csevegőalkalmazások, online többjátékos játékok, valós idejű együttműködési és értesítési szoftverek stb.

A WebSocket használata kliens oldalon

A WebSocket kiszolgálóoldali használata meglehetősen bonyolult lehet, és a folyamat jelentősen változik a nyelvtől függően (pl. C#, Jáva, stb.) és a választott könyvtár, ezért itt nem térünk ki rá. Ezután röviden megvitatjuk a WebSocket ügyféloldali használatát.

Minden modern böngésző megvalósít egy webes API-t, az úgynevezett WebSocket API, amely a böngésző protokoll verem a WebSocket protokollhoz. Ezzel az API-val használhatja a WebSocketet JavaScriptben. Az API lehetővé teszi egy WebSocket objektum létrehozását, amelyen keresztül WebSocket kapcsolatot hoz létre, és interakcióba lép a WebSocket szerverrel.

WebSocket objektum létrehozásához a következő kódformátumot használhatja:

legyen exampleSocket = new WebSocket("wss://www.example.com/socketserver", "dummyProtocol");

A konstruktor első argumentuma annak a WebSocket-kiszolgálónak az URI-je, amellyel kapcsolatot kíván létrehozni. Mindig "ws" vagy "wss" karakterekkel kezdődik. A második érv nem kötelező. Értéke vagy egy karakterlánc vagy egy karakterláncok tömbje, amely meghatározza az Ön által támogatott alprotokollokat.

A WebSocket objektum csak olvasható tulajdonsággal rendelkezik readyState néven. A tulajdonság elérése megjeleníti a WebSocket kapcsolat aktuális állapotát. A readyState négy lehetséges értéket tartalmaz: "connecting", "open", "closing" és "closed".

Amikor ez a kódsor lefut, a böngésző megpróbál csatlakozni a megadott szerverhez. A kapcsolat nem fejeződik be azonnal, így az exampleSocket readyState-je „csatlakozik”. A kapcsolat létrejöttéig nem lehet üzenetet küldeni vagy fogadni, ekkor a readyState értéke "open" lesz.

Az példaSocket Az objektum eseményfigyelővel rendelkezik (amely különbözik a DOM eseményfigyelők) úgynevezett "onopen", amely csak a kapcsolat létrejötte után teszi lehetővé további műveletek végrehajtását. Az objektumnak van egy "send" metódusa is, amely lehetővé teszi karakterláncok, blobok (bináris adatok) és ArrayBuffers üzenetek küldését a kiszolgálónak.

Íme egy példa ezek együttes használatára:

exampleSocket.onopen = funkció (esemény) {
exampleSocket.send("A WebSocket nagyon klassz");
};

Az API lehetőséget biztosít arra is, hogy reagáljon a szerver által küldött üzenetekre. Ez az "onmessage" eseményfigyelővel történik. Íme egy példa:

exampleSocket.onmessage = funkció (esemény) {
konzol.log(esemény.adat);
}

Ehelyett írhatsz is egy nyíl funkciót:

exampleSocket.onmessage = (esemény) => { konzol.log (esemény.adatok); }

Az API emellett a Bezárás() módszer a kapcsolat lezárására. Így néz ki:

példaSocket.Bezárás();

A WebSocket hatékony kétirányú kommunikációt tesz lehetővé

A WebSocket egy kétirányú kommunikációs protokoll. A szerverek és a böngészők protokollveremeket valósítanak meg a WebSocket használatával történő kommunikációhoz. A WebSocket azért létezik, mert a HTTP-t nem úgy tervezték, hogy kétirányú legyen. Vannak módszerek a kétirányú kapcsolatok megvalósítására HTTP-vel, de vannak problémák.

A WebSocket hatékony technológia, de nem minden esetben szükséges, mivel jelentősen bonyolíthatja az alkalmazás architektúráját. A WebSocket kliensoldali használata a böngésző WebSocket API-jával történik.