2014-09-26 1 views
1

이 질문은 수십 개의 UDP 소켓에서 많은 양의 데이터를 읽고 처리하기위한 Java 응용 프로그램 설계와 관련이 있습니다. 그러나 다른 언어 및 환경과 관련이 있다고 생각합니다.OS 소켓 버퍼를 메시지 대기열로 사용해야합니까?

위에서 설명한 것과 같은 네트워크 응용 프로그램은 가능한 한 빨리 소켓 버퍼에서 데이터를 읽는 데 필요한 전용 스레드가 있으며 응용 프로그램 내부에서 다시 큐잉하고 별도의 스레드에서 처리합니다.

처리 스레드가 다음 데이터를 수신 할 준비가 될 때까지 소켓 버퍼에 데이터를 남겨 두는 데 문제가 있습니까? 데이터를 빠르게 읽고 응용 프로그램 내부에 큐잉 할 수있는 이점이 있습니까?

처리 논리가 충분히 빠르지 않으면 버퍼가 가득 찰 것입니다. 그러나 처리 논리가 너무 느려 인바운드 데이터를 처리 할 수없는 경우 데이터가 대기중인 위치가 중요하지 않은 것처럼 보입니다. 갑자기 인바운드 데이터가 급증 할 경우 소켓 버퍼는 처리하기에 충분히 커야합니다.

답변

2

네트워크 스택에서 수신 된 UDP 패킷의 버퍼 크기가 제한됩니다. 버퍼가 가득 차면 일부 패킷이 손실됩니다.

UDP 패킷을 처리하는 소프트웨어가 알고있는 경우, 패킷을 처리 할 수 ​​있기까지 약간의 시간이 필요할 수 있으므로 가능한 한 빨리 패킷을 읽고 네트워크 스택 버퍼를 해지하고 자체 버퍼를 구현하는 것이 좋습니다 또는 패킷에 대한 대기열을 포함 할 수 있으며, 처리 자원을 실제로 사용할 수있을 때까지 캐시 될 수 있습니다.

관련 문제