반응형

 

처음에 안드로이드로 TCP 소켓 통신시 겪었던 문제입니다.(자바를 이용한 모든 TCP 소켓 통신에도 해당)

 

C++로 개발한 더미 클라이언트를 통해 서버 PC로 데이타를 무한히 날리면 일정한 속도로 잘 날아가는데,

 

안드로이드에서 해당 더미 클라이언트를 구현하여 데이타를 무한히 날리니 빨리 전송되다가 느리게 전송되다가

 

송신 속도가 일정치 않고 왔다갔다하는 현상이 나타났습니다.

 

확인 결과 NAGLE 알고림즘이 적용되있었기 때문입니다.

 

socket 클래스의 메소드 중에 setTCPNoDelay(boolean on) 함수가 존재하는데 이것을 true로 설정 후 송신하게 되면

 

버퍼링 없이 바로바로 데이타가 송신됩니다. 참고로 default는 false입니다.

 

※ NAGLE 알고리즘은 데이타를 효율적으로 송신하기 위한 알고리즘인데, 송신시에 일정량의 데이타를 버퍼에 모아놓았다가 한꺼번에 보내는 방식입니다. 게임 같이 실시간으로 패킷이 왔다갔다해야하는 경우는 적합하지 않겠죠.

반응형

+ Recent posts