공부용 블로그

채팅 구현할때 http를 쓰지 않고, TCP를 사용한 이유는? 본문

설계/Protocol

채팅 구현할때 http를 쓰지 않고, TCP를 사용한 이유는?

tomato212 2018. 8. 4. 04:33

Http는 클라1이 클라2에게 메세지를 보내기 위해 

클라1 - 서버 - 클라2 의 순서를 거치게 되는데,

http는 비연결 방식이기 때문에 클라2는 연결이 끊어지면 자신에게 메세지가 왔는지 안왔는지 알 수 없다.

그러므로 클라2는 서버에게 자신에게 온 메세지가 있는지 계속 물어봐야 된다.

클라2 뿐만 아니라 결국 모든 클라가 이런식으로 서버에게 계속 물어봐야 되므로 서버는 엄청난 일의 양에 시달리고

서버가 느려져 메세지 받는 클라도 모두 엄청 느리게 메세지를 받게 될 것이다


그래서 TCP로 채팅 서버(자바로 짠 메세지 주고받는 일을 처리하는 코드)를 구현. 채팅 서버를 켜놓기만 하면(소켓 연결 쓰레드를 계속 동작시킴) 클라로부터 들어오는 메세지를 받는 클라에게 전달해 줄 수 있다. 

(http로 서버와 클라사이에 계속 연결을 시켰다 끊었다 하는것보다는 서버에 쓰레드를 돌리는 것이 일이 더 가볍다.

-> 추상적이라 나중에 구체적인 프로세스 공부해봐야함)


UDP로 구현 하지 않는 이유는 네트워크 환경이 불안정할때 TCP는 통신속도가 조금 느려지더라도 패킷 전달이나 순서를 보장하는데 UDP는 보장이 안되기 때문에 메세지 전달이 제대로 되지 않을 수 있다.

(즉 네트워크 환경이 불안정할때 UDP를 쓰는 것이 문제임.)