2012-04-01 2 views
1

저는 스칼라를위한 Play 2.0 프레임 워크를 배우고 있으며 요청을 처리 할 수있는 것 외에도 많은 타이머처럼 백그라운드에서 연속적인 작업을하고 싶습니다. 그리고 어떻게 든 스레드 동기화 문제를 일으키지 않고 요청 - 응답 작업에서 해당 타이머에 액세스 할 수 있습니다. Play의 잡스에 대해 들어 보았습니다. 스칼라에는 액터가 있습니다. 그러나 2.0에서 Jobs에 대한 정보를 찾을 수는 없습니다. Promises로 대체 된 것 같습니다. 그러나 실제로 이것은 영구적 인 백그라운드 스레드를 실행하는 것과는 다르며, 액터가 전체 패러다임에 어떻게 들어 맞는지 확실하지 않습니다.Play 2.0 프레임 워크 - 기본 앱주기에 대한 지속적인 스레드?

기본적으로 제 질문은 Play 2.0에서 이러한 종류의 지속성을 유지하는 전통적인 방법입니다.

답변

4

작업이 약속으로 대체되지 않고 scheduling to send messages to actors ("비동기 작업 예약"참조)으로 바뀌 었습니다.

어쨌든 배우들이 당신을 위해가는 길일 것 같습니다. Play 2.0은 Akka을 사용합니다. 사실 아주 간단합니다. Akka 홈 페이지에는 액터가 무엇인지, 액터가 무엇을 할 수 있는지에 대한 자세한 설명이 있지만 액터는 사서함이있는 코드 (예 : 함수)로만 생각할 수 있습니다. 사서함에 메시지를 보낼 수 있으며 대기중인 각 메시지에 대해이 기능이 실행됩니다. 이는 반복되는 작업에 대한주기적인 신호 일 수도 있고 긴 백그라운드 작업에 대한 참조로 업데이트 할 내용을 알리는 것일 수도 있습니다.

+0

좋아, 배우 및 일정에 대한 재생 자습서를 읽었습니다. 액터의 개념은 단순하고 논리적 인 것처럼 보입니다. 얼랭 (Erlang)에서 몇 가지 사소한 경험이 있기 때문에 한 가지를 제외하고 모든 것이 분명해 보입니다. 스레드 업데이트주기를 구성하는 가장 좋은 방법은 무엇입니까? 스케줄러를 사용하여 스레드를 나타내는 액터에 정기적 인 업데이트 충동을 간단하게 스케줄해야합니까? 아니면 Actor에서 Thread를 시작하고'run()'메소드에서 해당주기를 구성합니까? – noncom

+1

예를 들어 실행할 작업을 예약하려는 경우 추가 스레드가 필요 없습니다. 30 분마다'Akka.system.scheduler.schedule (0 초, 30 분, testActor, "tick")'을 호출하면됩니다. 이벤트 기반 업데이트 작업 (예 : 사용자가 이미지를 업로드 한 후 나중에 사용하기 위해 이미지의 크기를 조정하는 경우)이 필요한 경우 작업을 완료해야 할 때 배우에게 메시지를 보냅니다. 'myActor! myMessage'. – Carsten

+0

정말 고마워! 그게 전부 다! – noncom

관련 문제