Sobes.tech
Junior

Ի՞նչ է 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: