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.