WebSocket er en integrert teknologi i mange moderne webapplikasjoner. Hvis du skriver kode for nettet, har du sikkert hørt begrepet før, men kanskje du ikke er sikker på hva det er eller hvordan du bruker det. Heldigvis er ikke WebSocket et komplekst konsept, og du kan få en grunnleggende forståelse av det ganske raskt.

Hva er WebSocket?

WebSocket, dessverre, er et av de navnene som ikke ser ut til å gi mening ved første øyekast. WebSocket er faktisk navnet på en kommunikasjonsprotokoll som muliggjør toveis kommunikasjon mellom klienten og webserveren.

I enklere termer er WebSocket en teknologi som lar en klient og en server opprette en tilkobling der begge parter kan sende den andre en melding når som helst.

Dette er forskjellig fra en vanlig HTTP-tilkobling, hvor klienten må starte en forespørsel, og først da kan serveren sende et svar. Faktisk er WebSocket en helt annen kommunikasjonsprotokoll fra HTTP som ble designet for å være HTTP-kompatibel. Når en klientapplikasjon ønsker å starte en WebSocket-tilkobling, må den bruke

instagram viewer
HTTP-oppgraderingsmekanisme for å bytte til WebSocket-protokollen.

På dette tidspunktet tenker du kanskje: "en protokoll er bare et sett med regler, hvordan kan du bruke det til å kode?".

Den manglende brikken er noe som kalles en protokollstabel. I hovedsak har enheter som støtter en protokoll maskinvare og programvare innebygd i dem som lar deg skrive applikasjoner som kommuniserer ved hjelp av protokollen. Protokollen brukes ikke direkte til å bygge noe.

Hvorfor ble WebSocket opprettet?

For å illustrere behovet for WebSocket, vurder mekanismen bak chatting på internett.

Noen sender en melding til chat-serveren fra enheten deres, men serveren må fortsatt sende den meldingen til enheten din før du kan lese den. Hvis serveren bruker HTTP, kan ikke serveren videresende den meldingen direkte til deg, fordi serveren ikke kan starte forespørsler.

Det er et par måter å løse dette problemet med HTTP. En måte er at klienten hele tiden sender oppdateringsforespørsler til serveren, og serveren vil videresende alle data den har i svaret. Denne teknikken kalles polling, og hver forespørsel kalles en polling. Det er to varianter av meningsmåling: lang meningsmåling og kort meningsmåling.

Bruk av den lange polling-varianten betyr at klientenheten hele tiden spør serveren om noen nye meldinger er tilgjengelige. Hvis nye meldinger er tilgjengelige, vil serveren sende meldingene som et svar. Hvis ikke, ville serveren utsette å svare og holde tilkoblingen åpen til den hadde data å sende tilbake, og deretter ville klienten umiddelbart sende en ny forespørsel.

Denne teknikken er ineffektiv, fordi HTTP ikke ble designet for å brukes på denne måten. Den yter tilstrekkelig i liten skala, men hver HTTP-forespørsel innebærer å sende ekstra data i header, og det resulterer i en betydelig økt belastning på serveren når mange klienter poller den.

Her er et diagram som illustrerer lang meningsmåling:

Den korte avstemningsvarianten er enda mindre effektiv. Kort fortalt holder ikke serveren tilkoblingen åpen før det er nye data, noe som betyr at klienten må fortsette å polle serveren med faste, veldig korte intervaller.

En annen teknikk for toveis kommunikasjon i HTTP kalles streaming.

I strømming, etter at den første forespørselen er sendt, holder serveren forbindelsen åpen på ubestemt tid, og sender nye deler av informasjon som kontinuerlige delvise svar til klienten.

Bruk av streaming resulterer i mindre dataoverhead og serverbelastning enn polling, fordi klienten ideelt sett bare gjør én HTTP-forespørsel. Dessverre skaper strømming problemer under visse forhold fordi nettlesere og nettverksformidlere (som proxyer) ofte prøver å håndtere delvise svar som ødelagte deler av ett stort HTTP-svar (som er normal HTTP-oppførsel), i stedet for som de separate meldingene de var ment å være.

WebSocket ble opprettet for å løse disse problemene. I motsetning til HTTP, ble WebSocket designet spesielt for toveis kommunikasjon. Med WebSocket, når en tilkobling er åpnet, kan klienten og serveren sende meldinger frem og tilbake uten problemer med polling eller streaming.

Bruk Cases for WebSocket

WebSocket er flott, men det betyr ikke at det skal brukes overalt.

Implementering av WebSocket kan legge til kompleksitet til applikasjonen din, spesielt på serversiden, så det bør ikke gjøres med mindre du har en god grunn. Det reiser spørsmålet: hvordan ser en god grunn ut?

WebSocket er ideell for brukstilfeller der hyppig toveiskommunikasjon med lav ventetid er nødvendig. WebSocket gir med andre ord en fordel for applikasjoner som trenger å kommunisere ofte eller i stor skala. Hvis kommunikasjonen ikke trenger å være sanntid eller applikasjonen aldri vil vokse til stor skala, kan polling eller streaming være tilstrekkelig for bruk i den applikasjonen.

Typisk bruk av WebSocket er å bygge chatteapplikasjoner, online flerspillerspill, sanntidssamarbeid og varslingsprogramvare, etc.

Slik bruker du WebSocket på klientsiden

Bruk av WebSocket på serversiden kan være ganske involvert, og prosessen varierer betydelig avhengig av språket (som f.eks. C#, Java, etc.) og valgfritt bibliotek, så vi vil ikke dekke det her. Deretter vil vi kort diskutere hvordan du bruker WebSocket på klientsiden.

Alle moderne nettlesere implementerer et web-API kalt WebSocket API, som er nettleserens protokollstabel for WebSocket-protokollen. Du kan bruke WebSocket i JavaScript ved å bruke denne APIen. API-en lar deg lage et WebSocket-objekt, der du oppretter en WebSocket-tilkobling og samhandler med WebSocket-serveren.

Du kan bruke følgende kodeformat for å lage et WebSocket-objekt:

la eksempelSocket = ny WebSocket("wss://www.example.com/socketserver", "dummyProtocol");

Det første argumentet til konstruktøren er URI-en til WebSocket-serveren du vil opprette en forbindelse med. Det vil alltid starte med "ws" eller "wss". Det andre argumentet er valgfritt. Verdien er enten en streng eller en rekke strenger, som spesifiserer underprotokollene du støtter.

WebSocket-objektet har en skrivebeskyttet egenskap kalt readyState. Å få tilgang til denne egenskapen gir den gjeldende tilstanden til WebSocket-tilkoblingen. readyState har fire mulige verdier: "connecting", "open", "closing" og "closed".

Når den kodelinjen kjører, vil nettleseren prøve å koble til den angitte serveren. Tilkoblingen vil ikke bli fullført med en gang, så readyState of exampleSocket vil "koble til". Ingen meldinger kan sendes eller mottas før tilkoblingen er fullført, da verdien av readyState blir "åpen".

De eksempelSocket objektet har en hendelseslytter (som er forskjellig fra DOM-hendelseslyttere) kalt "onopen" som lar deg utføre ytterligere handlinger først etter at forbindelsen er opprettet. Objektet har også en "send"-metode som lar deg sende strenger, Blobs (binære data) og ArrayBuffere som meldinger til serveren.

Her er et eksempel hvor du bruker disse sammen:

eksempelSocket.onopen = funksjon (begivenhet) {
eksempelSocket.send("WebSocket er veldig kult");
};

API-en gir deg også en måte å reagere på meldingene serveren sender. Dette gjøres med «onmessage»-hendelseslytteren. Her er et eksempel:

eksempelSocket.onmessage = funksjon (begivenhet) {
konsoll.Logg(begivenhet.data);
}

I stedet kan du også skrive en pilfunksjon:

exampleSocket.onmessage = (hendelse) => { konsoll.log (hendelse.data); }

API gir også en Lukk() metode for å lukke forbindelsen. Slik ser det ut:

eksempelSocket.Lukk();

WebSocket muliggjør effektiv toveiskommunikasjon

WebSocket er en toveis kommunikasjonsprotokoll. Servere og nettlesere implementerer protokollstabler for å kommunisere ved hjelp av WebSocket. WebSocket eksisterer fordi HTTP ikke ble designet for å være toveis. Det finnes metoder for å implementere toveis tilkoblinger med HTTP, men de har problemer.

WebSocket er kraftig teknologi, men er ikke nødvendig i alle tilfeller, da det kan komplisere applikasjonsarkitekturen betydelig. Bruk av WebSocket på klientsiden gjøres med nettleseren WebSocket API.