2010-03-01 2 views
2

나는 XML 피드를 요청하고,이를 읽고, 뷰에서 사용할 오브젝트로 파싱하는 Ruby on Rails 애플리케이션을 디자인하고있다. XML 피드에 대한 요청과 XML의 후속 수신은 일부 소스에서 완료되기까지 몇 초가 걸릴 수 있으므로 이러한 작업을 프론트 라인 애플리케이션 계층에서 오프로드하는 방법이 필요합니다. 요청을 처리하기 위해 애플리케이션 서버에 수백 밀리 초 이상 걸리지 않기를 바란다. 현재 응용 프로그램 제공 프로세스는 XML 피드 데이터가 구문 분석되고 사용자 요청을 완료 할 수 있도록 반환되는 XML 피드 데이터를 기다리고 앉아 기다립니다. DelayedJobs에 대해 알고 있습니다. 그러나이 작업의 결과가 실시간으로 사용자에게 반환된다는 점을 감안할 때,이를 백그라운드 작업으로 오프로드하여 결과를받는 방법을 확신 할 수 없습니다.백그라운드 프로세스에서 결과를 얻는 방법

이 작업을 백그라운드 작업으로 오프로드하면 페이지를로드하는 사용자에게 결과가 어떻게 반환됩니까?

답변

1

이런 종류의 공통된 모델 중 하나는 선호하는 백그라운드 작업 라이브러리 (DelayedJob은 인기있는 것 같습니다)를 사용하여 요청/응답주기에서 작업을 오프로드 한 다음 AJAX 폴링을 설정하는 것입니다 클라이언트에서 검색 결과를 사용할 수있게되면 페이지를 업데이트합니다. 당신이 코드가 서버에서 실행 펄 열려 있으면

+0

이렇게하려면 xml 피드의 결과를 표에 저장해야합니다. 나는 많은 양의 읽기와 쓰기를 유발할 것이기 때문에 이것을하지 않을 것입니다. –

0

, 나는 라이브 저널 인프라의 조각을 들어 올릴 것 : 당신이 Gearman을 원하는처럼 GearmanTheSchwartz

는 소리 - 그것은 루비 클라이언트 바인딩을 가지고있다.

( http://www.livejournal.com/doc/server/lj.install.workers_setup_install.html 참조)

+0

이것은 DelayedJob과 유사하게 나타납니다. 내 질문은 작업을 지연하는 방법이 아니라 작업을 지연 시키면 사용자에게 결과를 얻는 방법입니다. –

+0

http://code.sixapart.com/svn/gearman/trunk/api/ruby/examples/ –

0
당신은 당신의 주요 반환 페이지의 화재 XML 검색을 처리하는 서버의 두 번째 계층에서 AJAX 요청이 있고, 그 정보를 포함 할 페이지의 섹션에 대한 HTML을 반환 할 수 있습니다

. 그렇게하면 서버의 관점에서 비동기 작업을 실행하지 않고 AJAX 요청이 들어올 때까지 검색이 시작되지 않으므로 봇에서 낭비하는 대역폭이 줄어 듭니다.

이것은 AJAX의 표준 용도이므로 문제가되어 부적절한 부분이 있는지 잘 모르겠습니다.

0

가장 일반적인 접근법은 여기 AJAX와 DelayedJob을 사용하는 것입니다. 그러나 유용성 향상에 불과합니다. 사용자가 5 초 동안 페이지를로드하기를 기다리지 않고 5 초 동안 회 전자가있는 빈 페이지 또는 절반 빈 페이지를 얻습니다. 내 의견으로는 사용자 경험을 향상시키는 유일한 방법은 해당 XML 피드를 정기적으로로드하고 처리하고 캐시 된 결과를 사용자에게 표시하는 것입니다.

관련 문제