Rest와 WebSocket의 차이

  • 가장 큰 차이점은 접속을 유지하는지의 여부이다.

WebSocket이전의 양방향 통신 방법

Rest

Polling

  • 클라이언트가 서버에서 Http Request를 주기적으로 요청하고 서버가 응답하는 방식
  • 가장 쉬운 방법이지만 클라이언트의 수가 증가하면 서버의 부담도 커진다.

Long Polling

  • 클라이언트가 서버에 Http Request를 요청하면 서비는 대기하고 있다가 이벤트 발생시 클라이언트에게 응답하는 방식
  • Polling 처럼 불필요한 요청에 계속 응답하는 것이 아니기 때문에 요청에 따른 커넥션 맺는 과정에서 발생하는 비용이 줄어든다. 하지만 클라이언트의 수가 증가하면, 그에 따른 응답을 해야하는 수도 증가하기 때문에 Polling과 큰 차이는 없게 된다. 또한. 다수의 클라이언트가 동시에 이벤트가 발생할 경우 서버는 각 클라이언트에게 응답을 하게 되고 그 다수의 클라이언트는 서버에게 곧바로 요청을 하기 때문에 이 순간 서버의 부담도 커진다.

Streaming

  • Long Polling과 마찬가지로 클라이언트에서 서버로 일단 Http Request를 요청한다 서버에서 클라이언트로 이벤트를 전달할 때 해당 요청을 끊지 않고 필요한 메시지만 보내기를(flush) 반복하는 방식이다.
  • Long Polling에 비해 서버에서 메시지를 보내고도 다시 Http Requestt 연결을 하지 않아도 되어 부담이 경감될것으로 보인다.

AJAX

  • AJAX는 Javascript의 XmlHttpRequest 객체를 기반으로 한다. 비동기 Javascript 및 XML의 축약 된 양식이다 . XmlHttpRequest 객체를 사용하면 전체 웹 페이지를 다시 로드하지 않고도 Javascript를 실행할 수 있다. AJAX는 웹 페이지의 일부만 송수신

  • 서버가 요청없는 클라이언트에게 먼저 통신을 할수 있는 방법이 없음. 반이중 통신

WebSocket

WebSockets-Diagram

  • 순수 웹 환경에서 실시간 (양방향) 통신을 위한 스펙

  • 서버와 클라이언트가 지속적으로 연결된 TCP라인을 통해 실시간으로 데이터를 주고 받을 수 있도록하는 HTML5의 새로운 사양

  • 일반적인 TCP소켓과 같이 연결지향 양방향 전이중 통신이 가능하다.

  • 채팅, 게임, 실시간 주식차트와 같은 실시간이 요구되는 응용프로그램 개발에 사용가능

  • 클라이언트와 서버간에 전이중 통신을 수행하려면 클라이언트가 서버로 HTTP UPGRADE 요청을 보내야 한다. 이를 웹 소켓 프로토콜 핸드 쉐이크라고한다.

참고사이트

  • http://blog.naver.com/PostView.nhn?blogId=foxmann&logNo=90140923533

  • https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/

  • https://lkhlkh23.tistory.com/121

  • https://medium.com/@flsqja12_33844/http%EC%97%90%EC%84%9C%EB%B6%80%ED%84%B0-websocket%EA%B9%8C%EC%A7%80-94df91988788

  • https://adrenal.tistory.com/20

  • https://m.mkexdev.net/98