DolphaGo / TIL

TIL & issues
0 stars 1 forks source link

Broken pipe 관련 Exception #99

Open DolphaGo opened 2 years ago

DolphaGo commented 2 years ago

java.net.SocketException : Broken pipe

예를 들면 다음과 같은 상황이다.

웹브라우저에서 서버에 연결 시도(소켓 사용) -> accept된 socket을 HttpThread에 넘기고 -> ThreadPool에서 조건에 맞으면 해당 HttpThread를 기동

여기서 HttpThread가 일을 다 할 때까지 재요청을 하지 않으면 문제가 되지 않으나, HttpThread가 완료되기전 재요청을 하면 문제가 된다. 처음 요청때 생성된 Socket의 자원을 httpThread.run() 에서 사용하려고 하는 중에, 두번째 요청이 들어와 첫번째 요청의 Socket이 끊어져버리기 때문이다.

java.io.IOException: Broken pipe

예를 들면 다음과 같은 상황이다.

클라이언트에서 요청을 했는데 서버에서 작업을 완료하여 클라이언트로 결과를 넘겨주기 전에 네트워크가 끊김, 클라이언트가 정지 버튼을 누름, 브라우저를 종료, 다른화면으로 이동 등 최초 요청한 정보가 사라졌기 때문에 서버 측에서 작업 결과를 전달할 곳이 없어서 발생한다.

해결 방법

  1. Request(요청) 후 Response(응답) 기다리기
  1. Exception 무시
  1. 중복 요청 막기