2011-12-07 3 views
1

일부 사실 :
- 내 응용 프로그램이 클라이언트입니다.
- Socket 풀이 있습니다.
- 복수 Thread이이 풀을 사용합니다.
- 각 Thread은 시간 초과 될 수 있습니다.
- 시간 초과시 서버에서 응답을 읽지 않더라도 Socket이 풀로 반환됩니다.
(소켓의) InputStream을 비움

문제 : 제한 시간에
, 가능성이 Socket를 사용하여 다음 Thread이 (소켓이 반환 된 후 서버로 전송 된) 오래된 메시지를 읽을해야 할 것입니다.

질문 : 가장 좋은 방법을 "제거"를 사용하기 전에 SocketInputStream이 무엇
?

답변

4

I/O 프로토콜이 정상적으로 완료되지 않은 경우 가장 좋은 해결책은 문제가되는 I/O 채널을 닫고 풀에서 제거하고 새 연결을 연 다음 풀에 추가하는 것입니다.

작동하려면 클라이언트와 서버 모두 다른 최종 생명을 확인하는 방법을 제공하여이 상황에 대비해야합니다.

+0

서버가 몇 초만 느린 경우에도 (실제로 연결 상태가 좋으면 처리 속도가 느려 집니까?) – AndrewBourgeois

+1

@Andrew. 문제는 이전 스레드가 중단 된 부분을 알 수 없으므로 알려진 상태로 올바르게 빨리 감는 방법을 알지 못한다는 것입니다. 적절한 시간 제한을 선택하는 것은 네트워크 프로그래밍/유지 보수의 흑인 예술이며 네트워크 컨설턴트 (자신의 물건을 아는 사람)는 큰 $$를 지불하고 모든 페니를 가치있게 여기는 이유입니다. –