Programing

프린터가 조회없이 인쇄 작업을 처리 할 수 ​​있는지 확인

lottogame 2020. 11. 19. 07:43
반응형

프린터가 조회없이 인쇄 작업을 처리 할 수 ​​있는지 확인


나는 싸우고있다 PrintServiceLookup; lookupPrintServices(DocFlavor flavor, AttributeSet attributes)방법은 초기 실행으로 응용 프로그램에서 프린터를 감지하는 데 지나치게 느립니다. 네트워크 프린터가 100 대 이상인 클라이언트는이 코드를 처음 실행할 때이 코드를 실행하는 동작이 제대로 수행되지 않는다고보고했습니다.

조회 결과가 캐시되는 것을 확인한 후 처음에는 별도의 스레드 (시작시 실행 됨) 내에 더미 조회를 배포했습니다. 그러나 특정 클라이언트의 경우이 솔루션이 작동하지 않습니다.

현재 환경이 없으며 정확한 성능 문제의 원인을 알 수 없습니다.

검색 수행 하지 않고PrintService 주어진 MediaSizeName 지원 하는지 확인하려고합니다 . 그래서 사용 가능한 모든 s 및 기본값을 가져옵니다 .DocFlavorAttributeSetPrintServicePrintService

private static final PrintService[] PRINTSERVICES = 
   PrintServiceLookup.lookupPrintServices(null, null);

private static final PrintService DEFAULTSERVICE = 
   PrintServiceLookup.lookupDefaultPrintService();

그리고는 취득 PrintService과를 MediaSizeName클라이언트 요청에서. 마지막으로의 지원 PrintService여부를 묻습니다 MediaSizeName.

private void checkPrintServiceForMediaSize(PrintService pservice) throws MediaSizeNotSupportedException{
     if(!pservice.isAttributeValueSupported(_mediaSizeName,null,null))
            throw new MediaSizeNotSupportedException("This media size is not supported by the selected printer.");
     }

API는 선언 그 때 isAttributeValueSupported(Attribute attrval,DocFlavor flavor,AttributeSet attributes)널 (null)로 호출 DocFlavor하고AttributeSet

이 메소드는이 인쇄 서비스가 문서 특징 및 속성 세트의 가능한 조합에 대해 주어진 인쇄 속성 값을 지원하는지 여부를 알려줍니다.

지금까지 올바르게 작동했습니다. 그러나 프린터가 선택한 페이지 크기를 지원하는 경우 이것이 수행하는 방법인지 확실하지 않습니다.

이 문제에 대한 피드백과 경험에 감사드립니다.


최신 정보

접근 방식을 구현할 무렵 워크 스테이션에 심각한 네트워크 문제가있는 것으로 결정되어 파악하는 데 시간이 좀 걸렸습니다. 마지막으로, 네트워크로드를 시뮬레이션하기 위해 네트워킹 도구 인 SoftPerfect 연결 에뮬레이터로 구현을 테스트 했으며 결과가 크게 향상되지 않았습니다.

이 질문을 계속 테스트하고 업데이트하겠습니다. 제가 해결책을 찾고 여기 사람들과 공유 할 수 있기를 바랍니다. 초기 조회는 다음과 같습니다.

private static final PrintService[] PRINTSERVICES = 
   PrintServiceLookup.lookupPrintServices(null, null);

여전히 문제를 일으키고 있습니다.


업데이트 2

베타 빌드는 최종적으로 클라이언트 환경에서 테스트되었으며 인쇄 대화 상자의 성능이 약 5 배 향상되었습니다 (이제 동일한 환경에서 프린터의 초기 풀링이 약 5 분에 비해 약 1 분이 소요됨). 여전히 초기 대기 시간은 허용되는 시간이 아니지만 지금은 내가 할 수있는 최선의 방법입니다. 우리는 또한 클라이언트로부터 인쇄 서버가 사용되고 있다는 소식을 들었고 의견 (@Wardy)의 제안에 따라이 방향으로 나아갈 것입니다. 바라건대, 우리는 인쇄 서버의 장점을 활용할 수 있습니다.


보다 적극적인 캐싱. 클라이언트가 조회를 한 번 수행하고 재시작 사이에 캐시를 유지하도록합니다. 더 좋은 방법은 모든 클라이언트가 액세스 할 수있는 중앙 데이터 저장소에 캐시를 저장하는 것입니다.

네트워크 프린터와 그 기능은 그렇게 자주 변경되지는 않지만 결국 캐시를 업데이트해야하지만 "누가"와 "언제"는 환경에 따라 달라진다고 가정합니다.

백그라운드에서 현재 검색을 실행하는 클라이언트가 캐시를 업데이트 할 수 있으며 변경 사항이 감지되면 캐시를 업데이트합니다. 어쨌든 지속적으로 실행되는 중앙 구성 요소가 있다면 고정 된 간격으로 확인할 수있는 좋은 장소가 될 것입니다.

어떤 종류의 디렉터리 서비스가있는 경우 각 프린터에 연결하기 전에 해당 프린터 목록을 캐시와 비교하여 네트워크 및 CPU 부하를 줄이는 기능을 얻을 수 있습니다.


프린터의 목록이 LDAP에 저장되어있는 경우 사용하는 프린터를 조회하려고 할 수 있습니다 LDAP를 .

참고 URL : https://stackoverflow.com/questions/10012314/determining-if-a-printer-can-handle-a-print-job-without-look-up

반응형