2010-07-02 4 views
1

현재 axis2를 사용하여 Java WebService를 코딩 중입니다. 그러나 한 특정 요청은 다른 서버에서 3 ~ 10 초 정도 동안 상태를 계속 폴링해야합니다.Axis2, Thread.sleep을 사용하여 차단하기

3 초 동안 500 밀리마다 폴링을 수행하려면 Thread.sleep을 사용하고 싶습니다. 성능 문제와 같은 의미가 있습니까? 아니면 누구나 더 나은 아이디어를 제안 할 수 있습니까? 3-10초

답변

1

다른 옵션들 중 하나입니다. 이것은 서버에 많은 스레드가 걸려 있지 않음을 의미합니다.

그래서 두 개의 웹 서비스가 있는데 하나는 요청을 초기화하고 두 번째는 결과를 얻는 것입니다. 클라이언트 (축 서버가 아님)는 첫 번째 웹 서비스를 호출 한 다음 두 번째 웹 서비스를 여러 번 호출합니다.

이렇게하면 서버의 스레드에 대한 작업 (많은 작업을 단순화)이 필요 없다는 이점이 있습니다. 스레드 코드는 클라이언트에 있습니다. 당신이 당신의 서버에 잠을하고 끝내는 경우 Tomcat을 사용하는 경우

, 내가 확실히 이해하지 Best practices for configuring Apache/Tomcat

+0

thread.sleep은 사악한 습관입니까? 만약 내가 수면 패턴을 고수한다면? – henry

+0

일반적으로 스레드를 묶어주기 때문에 웹 서버에서 잠을자는 것이 좋지 않다고 생각합니다. 그러나 스레드를 묶어 두지 만 실제 문제는 없습니다. 당신이 기다리고있을 블로킹 읽기를한다면, 그것은 같은 종류의 일입니다. –

+0

알았어요. 감사. 요청은 매우 드뭅니다. – henry

1

또 다른 패턴이 received_ok 원래 발신자 반환하는 것입니다에 대한

편집 내 건축이

클라이언트처럼은 < ---> 축 2 < ---> 서버 폴링 플래그를 지정하고 두 번째 서버에서 돌아올 때 서버에 결과를 저장하십시오. 첫 번째 서버가 다시 연결되면 결과가 반환되거나 아직 반환되지 않은 사실을 반환 할 수 있습니다. 이 이점은 폴링을 다른 인스턴스에 위임 할 수 있고 원본 서버를 묶을 수 없다는 것입니다. 클라이언트를 변경할 수있는 경우

, 그때는 클라이언트에 대기를 이동하는 좋은 생각이 될 수 있습니다

+0

참조하면, 충분한 스레드를 가지고 있는지 확인하십시오. 좀 더 자세히 설명해 주시겠습니까? 추신. 내 질문을 편집했습니다. – henry

+0

호출이 동기되어야합니까? 클라이언트가 서버에 반환 한 정보를 게시하지 않은 경우 서버는 해당 작업을 수행하고 데이터를 저장합니다. 클라이언트는 나중에 다시 연결하여 데이터를 가져옵니다. –

+0

예. 그것은 동기가 필요하기 때문에 나를 연결하는 사용자/클라이언트에게는 투명합니다. 당신의 제안은 내 마음도 교차합니다. 하지만 나는 일회성 연결을 선호한다. :) 그냥, 내가 올바르게 접근하는지 잘 모르겠다. – henry