먼저 클라이언트에서 웹소켓 오픈 시, 서버로 아래와 같은 요청이 온다.
(일반적인 HTTP 요청의 형태에 몇몇 추가적인 헤더를 담아서 보내는 방식이다.)
여기서 살펴보야아 할 값은 Sec-WebSocket-Key인데, 이 값은 서버가 웹소켓 프로토콜을 제대로 이해하고 있는지를 구별하는 역할을 한다.
이제 서버에서는 프로토콜 업그레이드에 대한 응답을 보내주어야 한다.
상태 코드는 101번이고, 반드시 Sec-WebSocket-Accept 헤더에 알맞은 값을 채워서 보내야한다.
클라이언트로부터 받은 Sec-WebSocket-Key 값에 고정 GUID "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" 를 이어 붙인 후 SHA-1 해싱 -> base64로 인코딩한다.
(위의 GUID는 웹소켓 스펙에 정해진 고정 문자열이다.)
아래는 올바른 리스폰스의 예시
이 요청을 보낸 후부터는 HTTP/1.1 프로토콜이 아닌 웹소켓 프로토콜로 데이터를 주고받는다.
이걸 C# 코드로 구현하면 아래와 같다.
'C#' 카테고리의 다른 글
[C#] Async,Await의 내부 (0) | 2016.08.29 |
---|---|
[C#] async void / Task (0) | 2016.07.18 |
[C#] Mono 환경인지 구분하기 (0) | 2016.06.21 |
[NUnit] Callback 방식의 API 테스트하기 (1) | 2016.06.16 |
[C#] Thread.Abort시에도 안전한 코드 작성하기 (0) | 2016.06.13 |