Ի՞նչ է WebSocket-ը։
sobes.tech AI
Պատասխան AI-ից
Դիմումի մակարդակի պրոտոկոլը ապահովում է երկկողմ, լրիվ դուպլեքս հաղորդակցական ալիք մեկ TCP կապի միջոցով: Օգտագործվում է իրական ժամանակի հավելվածների համար՝ զրույցներ, առցանց խաղեր, առևտրային հարթակներ:
Տարբերությունները HTTP-ի հետ:
- HTTP: հաճախորդը ուղարկում է հարցում, սերվերը պատասխանում է (մեկ ուղղությամբ): Կառուցվում է նոր կապ յուրաքանչյուր հարցման համար կամ վերաօգտագործվում է Keep-Alive-ի միջոցով:
- WebSocket: կապի հաստատումից հետո, հաճախորդն ու սերվերը կարող են ցանկացած ժամանակ ուղարկել տվյալներ առանց նոր կապի հաստատելու (երկկողմ):
Կապի հաստատում:
Օգտագործում է HTTP՝ սկզբնական "handshake" համար: Հաճախորդը ուղարկում է HTTP հարցում՝ Upgrade: websocket և Connection: Upgrade գլխագրերով: Սերվերը պատասխանում է HTTP պատասխանով՝ 101 Switching Protocols վիճակով:
Տվյալների շրջանակներ:
Տվյալների փոխանցումը կատարվում է շրջանակների տեսքով, ինչը թույլ է տալիս փոխանցել տարբեր տիպի տվյալներ (տեքստ, բինար տվյալներ):
Կապի հաստատման օրինակ (սխեմատիկ):
Հաճախորդ -> Սերվեր (Ավելացման հարցում)
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Սերվեր -> Հաճախորդ (Ավելացման պատասխան)
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZgYesItU=
Այդուհետև սկսվում է WebSocket շրջանակների փոխանակումը:
Առավելություններ՝
- Նվազում է լատենցիան:
- Սերվերի բեռը նվազում է (չի պահանջվում մշտական պոլինգ):
- Հնարավորություն է իրական ժամանակի տվյալների փոխանցման:
Թերություններ՝
- Պահանջ է հաճախորդի և սերվերի կողմում աջակցություն:
- Ավելի բարդ իրականացում՝ համեմատած պարզ HTTP հարցման:
Java-ում WebSocket-ի հետ աշխատելու համար հաճախ օգտագործվում են գրադարաններ՝
- Java API for WebSocket (JSR 356):
- Spring WebSocket:
- Netty: