Sobes.tech
Junior

Kas ir WebSocket?

sobes.tech AI

Atbilde no AI

Programmatūras līmeņa protokols, kas nodrošina divvirzienu, pilna dupleksa sakaru kanālu caur vienu TCP savienojumu. To izmanto reāllaika lietojumprogrammām: čatiem, tiešsaistes spēlēm, tirdzniecības platformām.

Atšķirība no HTTP:

  • HTTP: klients sūta pieprasījumu, serveris atbild (vienvirziena). Izveido jaunu savienojumu katram pieprasījumam vai izmanto Keep-Alive.
  • WebSocket: pēc savienojuma izveides, klients un serveris var sūtīt datus jebkurā laikā bez jauna savienojuma izveides (divvirzienu).

Savienojuma izveide:

HTTP tiek izmantots sākotnējai "roku paspiedu" (handshake). Klients sūta HTTP pieprasījumu ar galveni Upgrade: websocket un Connection: Upgrade. Servers atbild ar HTTP atbildi ar statusu 101 Switching Protocols.

Datu rāmji:

Datu pārraide notiek rāmju veidā, kas ļauj pārraidīt dažāda veida datus (teksts, binārie dati).

Piemērs savienojuma izveidei (shēma):

Klients -> Servers (Upgrade pieprasījums) 

GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13

Servers -> Klients (Upgrade atbilde)

HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZgYesItU=

Pēc tam sākas WebSocket rāmju apmaiņa.

Priekšrocības:

  • Zema latentuma (low latency).
  • Samazināta servera slodze.
  • Iespēja pārraidīt datus reāllaikā.

Trūkumi:

  • Nepieciešama atbalsts klienta un servera pusē.
  • Sarežģītāka īstenošana salīdzinājumā ar vienkāršu HTTP pieprasījumu.

Java bieži izmanto bibliotēkas WebSocket darbam:

  • Java API for WebSocket (JSR 356).
  • Spring WebSocket.
  • Netty.