2010-03-12 3 views
0

내 프로그램에서 수신자가 더 큰 작업량을 가지고 있으므로 발신자가 애플리케이션 수준 ACK와 같은 방법을 통해 수신 대기를해야합니까?tcp/ip 통신 발신자 수신자가 다른 처리 속도 문제

+1

수신자가 계속 유지할 수없는 경우 발신자는 쓰기를 차단합니다. 이 행동이 당신이 원하는 것이 아닙니까? – jdizzle

+0

@jdizzle, 저에게는 좋습니다. – Benny

답변

1

OS가 TCP ACK 메시지를 직접 보내지 마십시오. 낮은 수준에서 처리됩니다. 나는 다음의 가능성을 순서대로 살펴볼 것입니다.

  • 수신기에 몇 가지 최적화가 있습니까? 수신기가 데이터를 처리 할 수있는 것보다 더 빠르게 네트워크 파이프를 채울 수있는 경우는 거의 없습니다. 리시버에 네트워크 I/O 스레드와 작업 스레드라는 적어도 두 개의 스레드가 있는지 확인하십시오.
  • 수신기가 공황 상태에 빠지기 시작하면 서버에 스로틀 메시지를 보낼 수 있습니다. 그러면 수신기가 걸릴 때까지 서버가 뒤꿈치를 식히게됩니다. 이것은 모든 메시지가 끝난 후 ack 메시지를 기다리는 것보다 더 효율적이지만 수신자가 일 때 일 때 어려울 수 있음을 알 필요가 있습니다.
  • 가장 느리지 만 가장 신뢰할 수있는 것은 수신자가 서버와 같은 모든 메시지를 확인하도록하는 것입니다. 이것은 TCP ACK가 아니지만 발신자/수신자가 통신에 사용하는 데이터 형식의 특수 메시지입니다.
+0

@JS 강박, ACK에 의하여, 나는 응용 프로그램 수준 ACK를 의미하지, TCP ACK가 아니라, reworded. – Benny