2012-05-01 1 views
0

내 응용 프로그램에서 클라이언트는 완료하는 데 1-2 분이 걸릴 수있는 복잡한 작업을 요청할 수 있습니다. 작업은 분리 된 스레드에서 실행되고 요청 처리기는 BlockingQueue를 통해 요청 처리기와 통신합니다.장기 실행 작업의 결과로 서버를 사용 중으로 폴링하지 않도록 브라우저 시간 초과를 악용 할 수 있습니까?

현재 서버는 클라이언트를 10 초마다 서버를 폴링하는 대기중인 페이지로 즉시 리디렉션합니다. 그러나 이것은 매우 비효율적이며 클라이언트가 설문 조사 직후에 작업이 끝나면 추가로 10 초를 기다려야 할 수도 있습니다.

내가 원하는 것은 대기중인 페이지에 대한 요청 처리기가 작업이 완료 될 때까지 차단 된 다음 사용자에게만 응답을 쓸 수있게하려는 것입니다. 내 관찰을 기반으로, 서버가 TCP 소켓을 허용한다면 (그리고 어쩌면 헤더를 다시 써 넣었습니까?) 대부분의 브라우저는 더 긴 시간 초과를 사용합니다. 그러나 다른 브라우저에서의 정확한 시간 초과에 대해서는 확신하지 못합니다.

브라우저를 2 분 정도 기다리는 것이 현실적입니까? 누구든지이보다 나은 아이디어에 대한 경험이 있습니까?

+1

이것은 '롱 폴링'또는 인터넷 검색을 돕기 위해 혜성이라고 불리는데, 많은 잡아 당김이 있다는 것을 알고 있습니다. 정말로 필요한 경우가 아니면, 그러한 작은 유스 케이스에 대한 노력은 가치가 없습니다. – Andrew

답변

0

Push Notification에 대해 생각해 보셨습니까?

현재 수행중인 것은 응답을 위해 서버를 폴링하는 Pull Notification입니다.

풀 서버는 응답이 준비되면이를 알려주며 그 혜성은 역방향 아약스라고합니다.

이 경우 브라우저가 더 이상 기다릴 필요가 없으며 다른 작업을 계속할 수 있으며 응답이 준비되면 사용자에게 제공하십시오.

브라우저가 대기하도록 만들 수 있습니다. 응답을 쓰지 마십시오.

설명하려면 작업을 제출 한 다음 다른 페이지로 리디렉션하지 말고 응답을 커밋하지 말고 대신 서버 처리를 시작하고 응답을 제출하십시오. 또한 UI에서 처리중인 메시지를 표시하므로 제출 된 작업이 처리중인 것을 사용자가 알 수 있습니다.

이럴 필요가 없습니다. 한 번에 한 요청 만 처리 할 수있는 것처럼 보이게합니다. 그렇다면 문제는 받아 들일 만하 며, 오늘날의 기술로는 거의 모든 사람들이 원하지만 적은 시간에 더 많은 것을 할 수 있습니다.

관련 문제