퀴즈존에 참여한 사람들 정보를 모두에게 실시간으로 보여줘야한다.

누군가가 나가거나 들어왔을때 다른 사람들에게도 정보를 업데이트 해줘야한다.

다양한 서버-클라이언트 간의 통신을 비교해보고 node환경과 위의 상황을 고려해 우리의 프로젝트의 적합한 것을 찾아보려한다.

대표적인 클라이언트 - 서버 실시간 데이터 통신

polling

HTTP통신을 이용

서버에 주기적을 요청을 보내 서버가 보내는 응답을 받음.

업데이트 된 데이터가 없어도 계속해서 데이터를 줘야하므로 서버의 리소스를 낭비하게 된다.

주기가 짧으면 서버에 부담을 주고, 길면 실시간 성이 떨어진다. 그렇기 때문에 우리의 서버스에서 실시간으로 모든 사용자에게 참여자를 업데이트 하는 것에서는 적합하지 않다.

long polling

롱폴링은 일단 서버로 요청을 보내고 이 상태에서 기다리다가 서버에서 이벤트가 있다면 응답을 받고 연결이 종료된다. 그리고 클라이언트는 곧바로 다시 요청을 보내서 다음 이벤트를 기다린다.

즉, 서버에서 특정한 상태 값이 변하기 전까지는 응답을 미루는 것이다.

사실상 실시간 통신이 유지 된다.

하지만 사용자마다 모두 http연결을 각각해줘야하고 그 연결을 유지해야한다.

단일 스레드에서 이벤트 루프를 사용하는 node환경에서 사용자(동시) 많을 경우 성능 저하가 심각하다. 서버의 리소스를 각각 오래 연결을 유지하며 점유를 하기 때문이다. 폴링 간격 만큼 지연이 발생한다.

그렇기 때문에 node환경에서 실시간 통신이 필요할때는 주로 Socket.IO, WebSocket, Server-sent Events 가 이용된다.