Sobes.tech
Junior — Middle

Կարող եք բացատրել, թե ինչ են վեբ-սոկետները և ինչպես են աշխատում երկկողմանի կապ հաստատելու համար հաճախորդի և սերվերի միջև:

sobes.tech AI

Պատասխան AI-ից

WebSocket-ները պրոտոկոլներ են, որոնք ապահովում են երկկողմանի (full-duplex) կապ հաճախորդի և սերվերի միջև մեկ TCP կապի վրա:

Ինչպես է աշխատում՝

  1. Հաճախորդը սկսում է HTTP հարցում Upgrade: websocket գլխով՝ անցնելու WebSocket պրոտոկոլին:
  2. Սերվերը հաստատում է անցումը պատասխանելով համապատասխան գլխով:
  3. Հաջող handshake-ից հետո ստեղծվում է մշտական կապ, որի միջոցով երկու կողմերն էլ կարող են ցանկացած ժամանակ տվյալներ ուղարկել:

Սա տարբերվում է սովորական HTTP-ից, որտեղ հաճախորդը ուղարկում է հարցում, սերվերը պատասխանում է, և կապը փակվում է: WebSocket-ները թույլ են տալիս սերվերին ուղարկել տվյալներ հաճախորդին առանց հարցման, ինչը օգտակար է չաթերի, խաղերի, ռեալ-թայմի և այլ ծրագրերի համար:

Օրինակ C#-ում System.Net.WebSockets օգտագործելով՝

using System.Net.WebSockets;
using System.Threading;
using System.Text;

// Տվյալների ուղարկում և ստացում WebSocket-ով
ClientWebSocket ws = new ClientWebSocket();
await ws.ConnectAsync(new Uri("wss://example.com/socket"), CancellationToken.None);

// Հաղորդագրության ուղարկում
string message = "Hello";
byte[] bytes = Encoding.UTF8.GetBytes(message);
await ws.SendAsync(new ArraySegment<byte>(bytes), WebSocketMessageType.Text, true, CancellationToken.None);

// Հաղորդագրության ստացում
var buffer = new byte[1024];
var result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
string received = Encoding.UTF8.GetString(buffer, 0, result.Count);