Program/Android Java

TCP_NODELAY 적용

너구리V 2012. 8. 21. 10:12

socket 을 이용하여 통신을 하는데, 반응 속도가 느리다면 tcp_nodelay 옵션을 사용해보는 것도 좋은 방법일 수 있습니다.

tcp socket 의 경우, 기본적으로 Nagle 알고리즘을 사용합니다. Nagle 알고리즘은 전송의 효율을 위해, 적은 데이터를 모아서 큰 패킷으로 한번에 보내는 방식입니다. 따라서 이경우 적은 양의 데이터가 자주 발생되는 시스템에서는 반응속도가 느려질 수 있습니다. 

이를 해결하기 위해 socket.setTcpNoDelay(true) 를 해주면 Nagle 알고리즘이 해제되면서, 패킷이 준비되면 바로 보내게 됩니다.

setTcpNoDelay

public void setTcpNoDelay(boolean on)
                   throws SocketException
    Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). 

Parameters:
    on - true to enable TCP_NODELAY, false to disable. 
Throws: 
    SocketException - if there is an error in the underlying protocol, such as a TCP error.
Since:
    JDK1.1
See Also:
    getTcpNoDelay()


하지만 TCP_NODELAY 를 사용하게 되면 반응속도가 증가될 수는 있으나, 네트워크의 효율이 감소하고 시스템의 부하가 늘어나게 되니 꼭 필요한 경우에만 사용하시기 바랍니다.

반응형