Junior — Middle
Оё метавонед шарҳ диҳед, ки веб-сокетҳо чӣ мебошанд ва онҳо чӣ гуна кор мекунанд, то иртиботи дуҷониба байни мизоҷ ва серверро барқарор кунанд?
sobes.tech AI
Ҷавоб аз AI
WebSocketҳо протоколе мебошанд, ки алоқаи дутарафа (full-duplex) байни мизоҷ ва серверро тавассути як пайванди TCP таъмин мекунанд.
Чӣ гуна кор мекунад:
- Мизоҷ дархости HTTP бо сарлавҳаи
Upgrade: websocketоғоз мекунад, то ба протоколи WebSocket гузарад. - Сервер гузаришро тасдиқ мекунад ва бо сарлавҳаи мувофиқ ҷавоб медиҳад.
- Пас аз 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);