[webSocket] 웹소켓이란?

첸첸·2021년 11월 11일
0

webSocket in java

목록 보기
1/9

웹소켓이란


웹소켓 어플리케이션에서 서버는 websocket endpoint를 만들고, client는 endpoint의 URI를 이용하여 서버와 연결한다.
이 연결이 지속되고 있는 한 server와 client는 언제나 서로 메세지를 주고 받을 수 있으며, 접속을 언제든지 종료 시킬 수 있다.
보통 client가 하나의 server에 연결하고, 서버들은 여러 client들을 받는다.
webSocket endpoint는 URI를 통해 나타자진다.

ws://host:port/path?query
wss://host:port/path?query

ws 스키마 : 암호화 되지 않은 웹소켓 연결
wss 스키마 : 암호화 된 웹소켓 연결

  • port는 옵션이지만 ws스키마는 기본적으로 80포트를, wss스키마는 443을 사용

WebSocket protocol


1. handshake

client가 webSocket endpoint에 endpoint의 URI를 사용하여 요청을 보내는 행위. handsake는 존재하고 있는 HTTP-based 구조와 양립가능하다. web server는 handshake를 HTTP connection upgrade요청으로 해석한다.

1) handshake from a client

GET /path/to/websocket/endpoint HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: http://localhost
Sec-WebSocket-Version: 13

2) handshake from a server in response to the client

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

서버는 Sec-WebSocket-Accept 헤더의 값을 생성하기 위해 알려진 작업을 Sec-WebSocket-Key 헤더 값에 적용한다. 클라이언트도 Sec-WebSocket-Key 헤더 값에 동일한 작업을 하여 결과값이 서버로 부터 받은 값과 동일하다면 연결이 정상적으로 이루어진다. 성공적인 handshake 후 서버와 클라이언트는 서로에게 메세지를 보낼 수 있다.

2. data transfer


참고 https://docs.oracle.com/javaee/7/tutorial/websocket001.htm#BABDABHF

0개의 댓글