다른 프록시를 선택하면서 OkHttp 리소스 재사용하기
호출을 만들기 전에 프록시로 구성된 OkHttp 클라이언트를 선택하고 newBuilder가 무엇을 공유하는지 이해합니다.
OkHttp 요청에는 일반적인 가변 프록시 필드가 없습니다. 호출을 만들기 전에 의도한 경로의 클라이언트를 선택하십시오.
나머지 구성이 공유되어야 한다면 기존 클라이언트에서 라우팅된 클라이언트를 파생시키십시오.
OkHttpClient routed = baseClient.newBuilder()
.proxy(new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("203.0.113.10", 8080)))
.build();엔드포인트는 예시일 뿐입니다.HTTP 프록시 목록의 공개 HTTP 엔드포인트는 허용된 공공 서비스 경로를 위해 이 소켓 주소를 채울 수 있습니다. 단, 기본 클라이언트의 정책이 새 엔드포인트에 프록시 자격 증명을 제공하지 않는 경우에 한합니다. OkHttp는 newBuilder가 연결 풀과 스레드 리소스를 원래 클라이언트와 공유한다고 문서화합니다. 그렇다고 해서 한 프록시를 통해 설정된 소켓을 다른 경로로 다시 레이블할 수 있다는 뜻은 아닙니다. 연결 적합성은 여전히 경로와 주소 구성에 달려 있습니다.
반복 작업에는 실제로 필요한 라우팅 정책을 키로 한 한정된 클라이언트 집합을 유지하십시오. 지금까지 관찰된 모든 임시 계정이나 프록시 변형을 키에 담은 무한 맵은 피하십시오.
리소스 공유는 종료에도 영향을 줍니다. 공유 캐시를 닫거나 공유 디스패처를 종료하면 해당 리소스를 사용하는 다른 파생 클라이언트에 영향을 줄 수 있습니다. 모든 파생 클라이언트를 격리된 네트워크 스택으로 취급하지 말고 리소스 소유권에 애플리케이션 수준의 명확한 수명을 부여하십시오.
마지막으로, 선택한 프록시의 정체성을 호출 자체의 메타데이터에 포함하십시오. 전역 “마지막으로 선택한 프록시” 변수로는 여러 동시 요청의 경로를 식별할 수 없습니다.