-
웹소켓이란?
=> TCP통신 방식으로 서버와 클라이언트 사이에 데이터를 주고 받을 수 있는 기술
TCP 통신 방식?
=> Transmission Control Protocol, 전송 제어 프로토콜 로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 다중화 프로토콜 의 일종 으로 Three Way Handshake 절차로 상대와 연결을 설정하고 통신을 시작하는 방식
웹소켓 사용 이유?
=> http 통신은 클라이언트가 서버에 요청을 보내야만 서버가 응답할 수 있는 단방향 통신을 사용하며, 서버는 클라이언트의 요청에 응답한 후 웹 브라우저 와의 연결을 끊는다. 하지만 실시간 업데이트 및 채팅 기능을 제공하기 위해서는 양방향 통신이 필요하다. 이러한 단점을 보완하여 실시간, 양방향으로 통신하기 위해서 개발된 프로토콜이 웹소켓이다. 웹소켓은 클라이언트-서버 간에 소켓 연결을 맺은 후에 실시간으로 데이터를 전송하여 처리할 수 있다.
웹소켓의 특징?
=> "실시간, 양방향 통신" => 클라이언트와 서버간의 연결이 유지되어 있어서 실시간으로 데이터 전송, 처리가 가능 하다. => 데이터 송수신을 동시에 처리할 수 있으며, Http 통신과 다르게 클라이언트가 먼저 요청하지 않아도 서버가 먼저 데이터를 보낼 수 있다.
웹소켓의 동작원리
=> http 통신에서는 서버와 브라우저의 연결 해제 때문에 효율이 떨어진다. 웹소켓은 클라이언트와의 connection 을 그대로 유지하고, 클라이언트의 요청 없이도 데이터를 전송할 수 있는 프로토콜이다.
opening handshake
: 웹소켓의 최초 접속은 일반 http request, handshaking 과정을 통해 이루어지며, 웹소켓 프로토콜로 변경된다.
request header
GET /chat HTTP/1.1 Host: localhost:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: <http://localhost:9000>
GET /chat HTTP/1.1
=> 웹소켓 통신 요청에서 http버전은 1.1 이상, get 메서드를 사용해야 함.
Upgrade => 프로토콜 전환을 위해 사용하는 헤더
Sec-WebSocket-Key => 유효한 요청인지 확인하기 위해 사용하는 키 값
Sec-WebSocket-Protocol => 사용하고자 하는 하나 이상의 웹 소켓 프로토콜 지정, 필수값은 아니다
Sec-WebSocket-Version => 클라이언트가 사용하고자 하는 웹소켓 프로토콜 버전
Origin => Cross-Site Websocket Hijacking 같은 공격을 피하기 위해 CORS 정책으로 만들어진 헤더
response header
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
HTTP/1.1 101 Switching Protocols => HTTP 에서 WS 로 프로토콜 전환이 승인 되었다는 응답코드
Sec-WebSocket-Accept => req.header의 Sec-WebSocket-Key에 유니크 아이디를 더해 SHA-1로 해싱한 후, base64로 인코딩한 결과로, 웹 소켓 연결이 개시되었음을 알려준다.
Data transfer
=> Opening Handshake 승인이 나면 '메시지’라는 단위로 데이터가 전달됨
Socket.io
=> 클라이언트-서버 간 양방향 통신을 위한 JavaScript의 라이브러리이다.
장점 단점
네임스페이스를 통한 다중화를 지원, 네임스페이스 사용으로 사용되는 TCP 연결 수를 최소화 하고 소켓 포트를 저장할 수 있다. 일반 WebSocket 클라이언트를 http://socket.io/ 서버와 함께 사용할 수 없다. 서버 측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드캐스트 할 수 있다. 제한된 기본 보안 기능을 제공한다. 예를 들어 인증을 위한 토큰 생성 및 갱신 메커니즘을 제공하지 않는다. WebSocket 을 지원하지 않는 환경에서 HTTP Long poling 을 제공한다. 클라이언트의 연결이 끊어지면 자동으로 다시 연결된다. SignalR 이 실시간 채팅을 구현할 때 서버측에 기능이 풍부한 API 를 제공하여 허브, 스트리밍 같은 기능을 제공하지만 구현하는 법이 복잡하고, 보다 간단하고 사용하기 쉬운 API를 제공하는 Socket.io를 선택
웹소켓이란?
=> TCP통신 방식으로 서버와 클라이언트 사이에 데이터를 주고 받을 수 있는 기술
TCP 통신 방식?
=> Transmission Control Protocol, 전송 제어 프로토콜 로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 다중화 프로토콜 의 일종 으로 Three Way Handshake 절차로 상대와 연결을 설정하고 통신을 시작하는 방식
웹소켓 사용 이유?
=> http 통신은 클라이언트가 서버에 요청을 보내야만 서버가 응답할 수 있는 단방향 통신을 사용하며, 서버는 클라이언트의 요청에 응답한 후 웹 브라우저 와의 연결을 끊는다. 하지만 실시간 업데이트 및 채팅 기능을 제공하기 위해서는 양방향 통신이 필요하다. 이러한 단점을 보완하여 실시간, 양방향으로 통신하기 위해서 개발된 프로토콜이 웹소켓이다. 웹소켓은 클라이언트-서버 간에 소켓 연결을 맺은 후에 실시간으로 데이터를 전송하여 처리할 수 있다.
웹소켓의 특징?
=> "실시간, 양방향 통신" => 클라이언트와 서버간의 연결이 유지되어 있어서 실시간으로 데이터 전송, 처리가 가능 하다. => 데이터 송수신을 동시에 처리할 수 있으며, Http 통신과 다르게 클라이언트가 먼저 요청하지 않아도 서버가 먼저 데이터를 보낼 수 있다.
웹소켓의 동작원리
=> http 통신에서는 서버와 브라우저의 연결 해제 때문에 효율이 떨어진다. 웹소켓은 클라이언트와의 connection 을 그대로 유지하고, 클라이언트의 요청 없이도 데이터를 전송할 수 있는 프로토콜이다.
opening handshake
: 웹소켓의 최초 접속은 일반 http request, handshaking 과정을 통해 이루어지며, 웹소켓 프로토콜로 변경된다.
request header
GET /chat HTTP/1.1 Host: localhost:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: <http://localhost:9000>
GET /chat HTTP/1.1
=> 웹소켓 통신 요청에서 http버전은 1.1 이상, get 메서드를 사용해야 함.
Upgrade => 프로토콜 전환을 위해 사용하는 헤더
Sec-WebSocket-Key => 유효한 요청인지 확인하기 위해 사용하는 키 값
Sec-WebSocket-Protocol => 사용하고자 하는 하나 이상의 웹 소켓 프로토콜 지정, 필수값은 아니다
Sec-WebSocket-Version => 클라이언트가 사용하고자 하는 웹소켓 프로토콜 버전
Origin => Cross-Site Websocket Hijacking 같은 공격을 피하기 위해 CORS 정책으로 만들어진 헤더
response header
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
HTTP/1.1 101 Switching Protocols => HTTP 에서 WS 로 프로토콜 전환이 승인 되었다는 응답코드
Sec-WebSocket-Accept => req.header의 Sec-WebSocket-Key에 유니크 아이디를 더해 SHA-1로 해싱한 후, base64로 인코딩한 결과로, 웹 소켓 연결이 개시되었음을 알려준다.
Data transfer
=> Opening Handshake 승인이 나면 '메시지’라는 단위로 데이터가 전달됨
Socket.io
=> 클라이언트-서버 간 양방향 통신을 위한 JavaScript의 라이브러리이다.
장점 단점
네임스페이스를 통한 다중화를 지원, 네임스페이스 사용으로 사용되는 TCP 연결 수를 최소화 하고 소켓 포트를 저장할 수 있다. 일반 WebSocket 클라이언트를 http://socket.io/ 서버와 함께 사용할 수 없다. 서버 측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드캐스트 할 수 있다. 제한된 기본 보안 기능을 제공한다. 예를 들어 인증을 위한 토큰 생성 및 갱신 메커니즘을 제공하지 않는다. WebSocket 을 지원하지 않는 환경에서 HTTP Long poling 을 제공한다. 클라이언트의 연결이 끊어지면 자동으로 다시 연결된다. SignalR 이 실시간 채팅을 구현할 때 서버측에 기능이 풍부한 API 를 제공하여 허브, 스트리밍 같은 기능을 제공하지만 구현하는 법이 복잡하고, 보다 간단하고 사용하기 쉬운 API를 제공하는 Socket.io를 선택
웹소켓이란?
=> TCP통신 방식으로 서버와 클라이언트 사이에 데이터를 주고 받을 수 있는 기술
TCP 통신 방식?
=> Transmission Control Protocol, 전송 제어 프로토콜 로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 다중화 프로토콜 의 일종 으로 Three Way Handshake 절차로 상대와 연결을 설정하고 통신을 시작하는 방식
웹소켓 사용 이유?
=> http 통신은 클라이언트가 서버에 요청을 보내야만 서버가 응답할 수 있는 단방향 통신을 사용하며, 서버는 클라이언트의 요청에 응답한 후 웹 브라우저 와의 연결을 끊는다. 하지만 실시간 업데이트 및 채팅 기능을 제공하기 위해서는 양방향 통신이 필요하다. 이러한 단점을 보완하여 실시간, 양방향으로 통신하기 위해서 개발된 프로토콜이 웹소켓이다. 웹소켓은 클라이언트-서버 간에 소켓 연결을 맺은 후에 실시간으로 데이터를 전송하여 처리할 수 있다.
웹소켓의 특징?
=> "실시간, 양방향 통신" => 클라이언트와 서버간의 연결이 유지되어 있어서 실시간으로 데이터 전송, 처리가 가능 하다. => 데이터 송수신을 동시에 처리할 수 있으며, Http 통신과 다르게 클라이언트가 먼저 요청하지 않아도 서버가 먼저 데이터를 보낼 수 있다.
웹소켓의 동작원리
=> http 통신에서는 서버와 브라우저의 연결 해제 때문에 효율이 떨어진다. 웹소켓은 클라이언트와의 connection 을 그대로 유지하고, 클라이언트의 요청 없이도 데이터를 전송할 수 있는 프로토콜이다.
opening handshake
: 웹소켓의 최초 접속은 일반 http request, handshaking 과정을 통해 이루어지며, 웹소켓 프로토콜로 변경된다.
request header
GET /chat HTTP/1.1 Host: localhost:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: <http://localhost:9000>
GET /chat HTTP/1.1
=> 웹소켓 통신 요청에서 http버전은 1.1 이상, get 메서드를 사용해야 함.
Upgrade => 프로토콜 전환을 위해 사용하는 헤더
Sec-WebSocket-Key => 유효한 요청인지 확인하기 위해 사용하는 키 값
Sec-WebSocket-Protocol => 사용하고자 하는 하나 이상의 웹 소켓 프로토콜 지정, 필수값은 아니다
Sec-WebSocket-Version => 클라이언트가 사용하고자 하는 웹소켓 프로토콜 버전
Origin => Cross-Site Websocket Hijacking 같은 공격을 피하기 위해 CORS 정책으로 만들어진 헤더
response header
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
HTTP/1.1 101 Switching Protocols => HTTP 에서 WS 로 프로토콜 전환이 승인 되었다는 응답코드
Sec-WebSocket-Accept => req.header의 Sec-WebSocket-Key에 유니크 아이디를 더해 SHA-1로 해싱한 후, base64로 인코딩한 결과로, 웹 소켓 연결이 개시되었음을 알려준다.
Data transfer
=> Opening Handshake 승인이 나면 '메시지’라는 단위로 데이터가 전달됨
Socket.io
=> 클라이언트-서버 간 양방향 통신을 위한 JavaScript의 라이브러리이다.
장점 단점
네임스페이스를 통한 다중화를 지원, 네임스페이스 사용으로 사용되는 TCP 연결 수를 최소화 하고 소켓 포트를 저장할 수 있다. 일반 WebSocket 클라이언트를 http://socket.io/ 서버와 함께 사용할 수 없다. 서버 측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드캐스트 할 수 있다. 제한된 기본 보안 기능을 제공한다. 예를 들어 인증을 위한 토큰 생성 및 갱신 메커니즘을 제공하지 않는다. WebSocket 을 지원하지 않는 환경에서 HTTP Long poling 을 제공한다. 클라이언트의 연결이 끊어지면 자동으로 다시 연결된다. SignalR 이 실시간 채팅을 구현할 때 서버측에 기능이 풍부한 API 를 제공하여 허브, 스트리밍 같은 기능을 제공하지만 구현하는 법이 복잡하고, 보다 간단하고 사용하기 쉬운 API를 제공하는 Socket.io를 선택
웹소켓이란?
=> TCP통신 방식으로 서버와 클라이언트 사이에 데이터를 주고 받을 수 있는 기술
TCP 통신 방식?
=> Transmission Control Protocol, 전송 제어 프로토콜 로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 다중화 프로토콜 의 일종 으로 Three Way Handshake 절차로 상대와 연결을 설정하고 통신을 시작하는 방식
웹소켓 사용 이유?
=> http 통신은 클라이언트가 서버에 요청을 보내야만 서버가 응답할 수 있는 단방향 통신을 사용하며, 서버는 클라이언트의 요청에 응답한 후 웹 브라우저 와의 연결을 끊는다. 하지만 실시간 업데이트 및 채팅 기능을 제공하기 위해서는 양방향 통신이 필요하다. 이러한 단점을 보완하여 실시간, 양방향으로 통신하기 위해서 개발된 프로토콜이 웹소켓이다. 웹소켓은 클라이언트-서버 간에 소켓 연결을 맺은 후에 실시간으로 데이터를 전송하여 처리할 수 있다.
웹소켓의 특징?
=> "실시간, 양방향 통신" => 클라이언트와 서버간의 연결이 유지되어 있어서 실시간으로 데이터 전송, 처리가 가능 하다. => 데이터 송수신을 동시에 처리할 수 있으며, Http 통신과 다르게 클라이언트가 먼저 요청하지 않아도 서버가 먼저 데이터를 보낼 수 있다.
웹소켓의 동작원리
=> http 통신에서는 서버와 브라우저의 연결 해제 때문에 효율이 떨어진다. 웹소켓은 클라이언트와의 connection 을 그대로 유지하고, 클라이언트의 요청 없이도 데이터를 전송할 수 있는 프로토콜이다.
opening handshake
: 웹소켓의 최초 접속은 일반 http request, handshaking 과정을 통해 이루어지며, 웹소켓 프로토콜로 변경된다.
request header
GET /chat HTTP/1.1 Host: localhost:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: <http://localhost:9000>
GET /chat HTTP/1.1
=> 웹소켓 통신 요청에서 http버전은 1.1 이상, get 메서드를 사용해야 함.
Upgrade => 프로토콜 전환을 위해 사용하는 헤더
Sec-WebSocket-Key => 유효한 요청인지 확인하기 위해 사용하는 키 값
Sec-WebSocket-Protocol => 사용하고자 하는 하나 이상의 웹 소켓 프로토콜 지정, 필수값은 아니다
Sec-WebSocket-Version => 클라이언트가 사용하고자 하는 웹소켓 프로토콜 버전
Origin => Cross-Site Websocket Hijacking 같은 공격을 피하기 위해 CORS 정책으로 만들어진 헤더
response header
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
HTTP/1.1 101 Switching Protocols => HTTP 에서 WS 로 프로토콜 전환이 승인 되었다는 응답코드
Sec-WebSocket-Accept => req.header의 Sec-WebSocket-Key에 유니크 아이디를 더해 SHA-1로 해싱한 후, base64로 인코딩한 결과로, 웹 소켓 연결이 개시되었음을 알려준다.
Data transfer
=> Opening Handshake 승인이 나면 '메시지’라는 단위로 데이터가 전달됨
Socket.io
=> 클라이언트-서버 간 양방향 통신을 위한 JavaScript의 라이브러리이다.
장점 단점
네임스페이스를 통한 다중화를 지원, 네임스페이스 사용으로 사용되는 TCP 연결 수를 최소화 하고 소켓 포트를 저장할 수 있다. 일반 WebSocket 클라이언트를 http://socket.io/ 서버와 함께 사용할 수 없다. 서버 측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드캐스트 할 수 있다. 제한된 기본 보안 기능을 제공한다. 예를 들어 인증을 위한 토큰 생성 및 갱신 메커니즘을 제공하지 않는다. WebSocket 을 지원하지 않는 환경에서 HTTP Long poling 을 제공한다. 클라이언트의 연결이 끊어지면 자동으로 다시 연결된다. SignalR 이 실시간 채팅을 구현할 때 서버측에 기능이 풍부한 API 를 제공하여 허브, 스트리밍 같은 기능을 제공하지만 구현하는 법이 복잡하고, 보다 간단하고 사용하기 쉬운 API를 제공하는 Socket.io를 선택
웹소켓이란?
=> TCP통신 방식으로 서버와 클라이언트 사이에 데이터를 주고 받을 수 있는 기술
TCP 통신 방식?
=> Transmission Control Protocol, 전송 제어 프로토콜 로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 다중화 프로토콜 의 일종 으로 Three Way Handshake 절차로 상대와 연결을 설정하고 통신을 시작하는 방식
웹소켓 사용 이유?
=> http 통신은 클라이언트가 서버에 요청을 보내야만 서버가 응답할 수 있는 단방향 통신을 사용하며, 서버는 클라이언트의 요청에 응답한 후 웹 브라우저 와의 연결을 끊는다. 하지만 실시간 업데이트 및 채팅 기능을 제공하기 위해서는 양방향 통신이 필요하다. 이러한 단점을 보완하여 실시간, 양방향으로 통신하기 위해서 개발된 프로토콜이 웹소켓이다. 웹소켓은 클라이언트-서버 간에 소켓 연결을 맺은 후에 실시간으로 데이터를 전송하여 처리할 수 있다.
웹소켓의 특징?
=> "실시간, 양방향 통신" => 클라이언트와 서버간의 연결이 유지되어 있어서 실시간으로 데이터 전송, 처리가 가능 하다. => 데이터 송수신을 동시에 처리할 수 있으며, Http 통신과 다르게 클라이언트가 먼저 요청하지 않아도 서버가 먼저 데이터를 보낼 수 있다.
웹소켓의 동작원리
=> http 통신에서는 서버와 브라우저의 연결 해제 때문에 효율이 떨어진다. 웹소켓은 클라이언트와의 connection 을 그대로 유지하고, 클라이언트의 요청 없이도 데이터를 전송할 수 있는 프로토콜이다.
opening handshake
: 웹소켓의 최초 접속은 일반 http request, handshaking 과정을 통해 이루어지며, 웹소켓 프로토콜로 변경된다.
request header
GET /chat HTTP/1.1 Host: localhost:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: <http://localhost:9000>
GET /chat HTTP/1.1
=> 웹소켓 통신 요청에서 http버전은 1.1 이상, get 메서드를 사용해야 함.
Upgrade => 프로토콜 전환을 위해 사용하는 헤더
Sec-WebSocket-Key => 유효한 요청인지 확인하기 위해 사용하는 키 값
Sec-WebSocket-Protocol => 사용하고자 하는 하나 이상의 웹 소켓 프로토콜 지정, 필수값은 아니다
Sec-WebSocket-Version => 클라이언트가 사용하고자 하는 웹소켓 프로토콜 버전
Origin => Cross-Site Websocket Hijacking 같은 공격을 피하기 위해 CORS 정책으로 만들어진 헤더
response header
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
HTTP/1.1 101 Switching Protocols => HTTP 에서 WS 로 프로토콜 전환이 승인 되었다는 응답코드
Sec-WebSocket-Accept => req.header의 Sec-WebSocket-Key에 유니크 아이디를 더해 SHA-1로 해싱한 후, base64로 인코딩한 결과로, 웹 소켓 연결이 개시되었음을 알려준다.
Data transfer
=> Opening Handshake 승인이 나면 '메시지’라는 단위로 데이터가 전달됨
Socket.io
=> 클라이언트-서버 간 양방향 통신을 위한 JavaScript의 라이브러리이다.
장점 단점
네임스페이스를 통한 다중화를 지원, 네임스페이스 사용으로 사용되는 TCP 연결 수를 최소화 하고 소켓 포트를 저장할 수 있다. 일반 WebSocket 클라이언트를 http://socket.io/ 서버와 함께 사용할 수 없다. 서버 측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드캐스트 할 수 있다. 제한된 기본 보안 기능을 제공한다. 예를 들어 인증을 위한 토큰 생성 및 갱신 메커니즘을 제공하지 않는다. WebSocket 을 지원하지 않는 환경에서 HTTP Long poling 을 제공한다. 클라이언트의 연결이 끊어지면 자동으로 다시 연결된다. SignalR 이 실시간 채팅을 구현할 때 서버측에 기능이 풍부한 API 를 제공하여 허브, 스트리밍 같은 기능을 제공하지만 구현하는 법이 복잡하고, 보다 간단하고 사용하기 쉬운 API를 제공하는 Socket.io를 선택
웹소켓이란?
=> TCP통신 방식으로 서버와 클라이언트 사이에 데이터를 주고 받을 수 있는 기술
TCP 통신 방식?
=> Transmission Control Protocol, 전송 제어 프로토콜 로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 다중화 프로토콜 의 일종 으로 Three Way Handshake 절차로 상대와 연결을 설정하고 통신을 시작하는 방식
웹소켓 사용 이유?
=> http 통신은 클라이언트가 서버에 요청을 보내야만 서버가 응답할 수 있는 단방향 통신을 사용하며, 서버는 클라이언트의 요청에 응답한 후 웹 브라우저 와의 연결을 끊는다. 하지만 실시간 업데이트 및 채팅 기능을 제공하기 위해서는 양방향 통신이 필요하다. 이러한 단점을 보완하여 실시간, 양방향으로 통신하기 위해서 개발된 프로토콜이 웹소켓이다. 웹소켓은 클라이언트-서버 간에 소켓 연결을 맺은 후에 실시간으로 데이터를 전송하여 처리할 수 있다.
웹소켓의 특징?
=> "실시간, 양방향 통신" => 클라이언트와 서버간의 연결이 유지되어 있어서 실시간으로 데이터 전송, 처리가 가능 하다. => 데이터 송수신을 동시에 처리할 수 있으며, Http 통신과 다르게 클라이언트가 먼저 요청하지 않아도 서버가 먼저 데이터를 보낼 수 있다.
웹소켓의 동작원리
=> http 통신에서는 서버와 브라우저의 연결 해제 때문에 효율이 떨어진다. 웹소켓은 클라이언트와의 connection 을 그대로 유지하고, 클라이언트의 요청 없이도 데이터를 전송할 수 있는 프로토콜이다.
opening handshake
: 웹소켓의 최초 접속은 일반 http request, handshaking 과정을 통해 이루어지며, 웹소켓 프로토콜로 변경된다.
request header
GET /chat HTTP/1.1 Host: localhost:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: <http://localhost:9000>
GET /chat HTTP/1.1
=> 웹소켓 통신 요청에서 http버전은 1.1 이상, get 메서드를 사용해야 함.
Upgrade => 프로토콜 전환을 위해 사용하는 헤더
Sec-WebSocket-Key => 유효한 요청인지 확인하기 위해 사용하는 키 값
Sec-WebSocket-Protocol => 사용하고자 하는 하나 이상의 웹 소켓 프로토콜 지정, 필수값은 아니다
Sec-WebSocket-Version => 클라이언트가 사용하고자 하는 웹소켓 프로토콜 버전
Origin => Cross-Site Websocket Hijacking 같은 공격을 피하기 위해 CORS 정책으로 만들어진 헤더
response header
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
HTTP/1.1 101 Switching Protocols => HTTP 에서 WS 로 프로토콜 전환이 승인 되었다는 응답코드
Sec-WebSocket-Accept => req.header의 Sec-WebSocket-Key에 유니크 아이디를 더해 SHA-1로 해싱한 후, base64로 인코딩한 결과로, 웹 소켓 연결이 개시되었음을 알려준다.
Data transfer
=> Opening Handshake 승인이 나면 '메시지’라는 단위로 데이터가 전달됨
Socket.io
=> 클라이언트-서버 간 양방향 통신을 위한 JavaScript의 라이브러리이다.
장점 단점
네임스페이스를 통한 다중화를 지원, 네임스페이스 사용으로 사용되는 TCP 연결 수를 최소화 하고 소켓 포트를 저장할 수 있다. 일반 WebSocket 클라이언트를 http://socket.io/ 서버와 함께 사용할 수 없다. 서버 측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드캐스트 할 수 있다. 제한된 기본 보안 기능을 제공한다. 예를 들어 인증을 위한 토큰 생성 및 갱신 메커니즘을 제공하지 않는다. WebSocket 을 지원하지 않는 환경에서 HTTP Long poling 을 제공한다. 클라이언트의 연결이 끊어지면 자동으로 다시 연결된다. SignalR 이 실시간 채팅을 구현할 때 서버측에 기능이 풍부한 API 를 제공하여 허브, 스트리밍 같은 기능을 제공하지만 구현하는 법이 복잡하고, 보다 간단하고 사용하기 쉬운 API를 제공하는 Socket.io를 선택
웹소켓이란?
=> TCP통신 방식으로 서버와 클라이언트 사이에 데이터를 주고 받을 수 있는 기술
TCP 통신 방식?
=> Transmission Control Protocol, 전송 제어 프로토콜 로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 다중화 프로토콜 의 일종 으로 Three Way Handshake 절차로 상대와 연결을 설정하고 통신을 시작하는 방식
웹소켓 사용 이유?
=> http 통신은 클라이언트가 서버에 요청을 보내야만 서버가 응답할 수 있는 단방향 통신을 사용하며, 서버는 클라이언트의 요청에 응답한 후 웹 브라우저 와의 연결을 끊는다. 하지만 실시간 업데이트 및 채팅 기능을 제공하기 위해서는 양방향 통신이 필요하다. 이러한 단점을 보완하여 실시간, 양방향으로 통신하기 위해서 개발된 프로토콜이 웹소켓이다. 웹소켓은 클라이언트-서버 간에 소켓 연결을 맺은 후에 실시간으로 데이터를 전송하여 처리할 수 있다.
웹소켓의 특징?
=> "실시간, 양방향 통신" => 클라이언트와 서버간의 연결이 유지되어 있어서 실시간으로 데이터 전송, 처리가 가능 하다. => 데이터 송수신을 동시에 처리할 수 있으며, Http 통신과 다르게 클라이언트가 먼저 요청하지 않아도 서버가 먼저 데이터를 보낼 수 있다.
웹소켓의 동작원리
=> http 통신에서는 서버와 브라우저의 연결 해제 때문에 효율이 떨어진다. 웹소켓은 클라이언트와의 connection 을 그대로 유지하고, 클라이언트의 요청 없이도 데이터를 전송할 수 있는 프로토콜이다.
opening handshake
: 웹소켓의 최초 접속은 일반 http request, handshaking 과정을 통해 이루어지며, 웹소켓 프로토콜로 변경된다.
request header
GET /chat HTTP/1.1 Host: localhost:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: <http://localhost:9000>
GET /chat HTTP/1.1
=> 웹소켓 통신 요청에서 http버전은 1.1 이상, get 메서드를 사용해야 함.
Upgrade => 프로토콜 전환을 위해 사용하는 헤더
Sec-WebSocket-Key => 유효한 요청인지 확인하기 위해 사용하는 키 값
Sec-WebSocket-Protocol => 사용하고자 하는 하나 이상의 웹 소켓 프로토콜 지정, 필수값은 아니다
Sec-WebSocket-Version => 클라이언트가 사용하고자 하는 웹소켓 프로토콜 버전
Origin => Cross-Site Websocket Hijacking 같은 공격을 피하기 위해 CORS 정책으로 만들어진 헤더
response header
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
HTTP/1.1 101 Switching Protocols => HTTP 에서 WS 로 프로토콜 전환이 승인 되었다는 응답코드
Sec-WebSocket-Accept => req.header의 Sec-WebSocket-Key에 유니크 아이디를 더해 SHA-1로 해싱한 후, base64로 인코딩한 결과로, 웹 소켓 연결이 개시되었음을 알려준다.
Data transfer
=> Opening Handshake 승인이 나면 '메시지’라는 단위로 데이터가 전달됨
Socket.io
=> 클라이언트-서버 간 양방향 통신을 위한 JavaScript의 라이브러리이다.
장점 단점
네임스페이스를 통한 다중화를 지원, 네임스페이스 사용으로 사용되는 TCP 연결 수를 최소화 하고 소켓 포트를 저장할 수 있다. 일반 WebSocket 클라이언트를 http://socket.io/ 서버와 함께 사용할 수 없다. 서버 측에서 연결된 모든 클라이언트에 이벤트를 유연하게 브로드캐스트 할 수 있다. 제한된 기본 보안 기능을 제공한다. 예를 들어 인증을 위한 토큰 생성 및 갱신 메커니즘을 제공하지 않는다. WebSocket 을 지원하지 않는 환경에서 HTTP Long poling 을 제공한다. 클라이언트의 연결이 끊어지면 자동으로 다시 연결된다. SignalR 이 실시간 채팅을 구현할 때 서버측에 기능이 풍부한 API 를 제공하여 허브, 스트리밍 같은 기능을 제공하지만 구현하는 법이 복잡하고, 보다 간단하고 사용하기 쉬운 API를 제공하는 Socket.io를 선택