scala actor - Play에서 Akka가 어떻게 사용됩니까?




mock (2)

Play 2.0 에서 Play는 액터를 통과하라는 모든 요청을 위임했습니다. Akka의 향후 API 및 기타 부분에 크게 의존했습니다.

Play 2.1 에서 Akka의 향후 API가 Scala 2.10으로 이전됨에 따라 Play는 Akka에 덜 직접적으로 의존하기 시작했습니다. 그것은 Akka의 모든 실행 컨텍스트를 가져오고 Akka와의 통합을 제공하지만, 그 정도에 관한 것입니다.

Play 2.3 에서는 Akka 통합, 특히 WebSocket을 지원하는 새로운 기능이 추가되었습니다.

Play 2.4 에서 Play는 새로운 akka-http (이전의 스프레이라고 함)로 이식되며, 그 시점에서 Play는 Akka에서 얻을 수있는대로 제작됩니다.

결과는 무엇입니까? Akka는 동시성을 다루기 쉬운 프로그래밍 패러다임을 제공합니다. 또한 분산 프로그래밍에 대한 훌륭한 추상화를 제공합니다. 분산 프로그래밍에 대해 가장 어려운 것은 항상 발생하는 실패를 적절하게 처리하는 것입니다. 대부분의 도구는 오류를 숨기려고 시도하지만 해결하기 위해 시도하지만 불행히도 숨기 만해도 문제가 해결되지는 않습니다. 특정 유형의 오류를 해결하려고 할 때 숨겨진 사실 너는 네 길을 간다. Akka는 여러분의 얼굴에 오류를 일으키므로 코딩 할 때 응용 프로그램이 오류에 어떻게 반응하는지 생각해야합니다. 결과적으로 당신은 실패에 대해 관대하다는 방식으로 애플리케이션을 설계 / 코딩해야합니다. 또한 계층 적 방식으로 처리 할 수있는 도구를 제공하여 어떤 유형의 실패를 처리 할 수준과 실패에 대한 대응 방법을 지정할 수 있습니다 (사망, n 번 시도 등) .

그러면 어떻게 도움이됩니까? 더 나은 질문은 Play 사용자에게 어떻게 도움이되는지입니다. Akka는 Play 자체를 구현하는 데 도움이되지만 Akka 없이도 구현할 수 있습니다 (사실 Netty는 이제 대부분의 어려운 작업을 수행하며 Play 2.4에서는 변경 될 것입니다). 중요한 것은 Akka와 원활하게 통합되어 배우와 함께 HTTP 요청을 처리하고 오류를 처리하는 등의 작업을 쉽게 수행 할 수 있다는 점입니다. Play 사용자는 확장 성과 탄력성있는 방식으로 애플리케이션을 설계 할 수 있으므로 Play 사용자에게 도움이됩니다.

업데이트 : 위의 3 년 전에 작성된, 그 이후로 많이 변경되었습니다. Play 2.4는 akka-http에 대한 실험적 지원을 제공했지만 여전히 Play는 기본적으로 Netty를 사용합니다.

Play 2.5 에서는 iteratees API를 사용하지 않고 Akka 스트림으로 전환했습니다. 이것은 이제 모든 비동기 IO가 Akka 스트림을 통과한다는 것을 의미합니다. 곧 Play 2.6 이상이 될지 모르겠다. Play는 akka-http를 서버의 기본 백업 구현 (아직 WS 클라이언트는 아님)으로 만들기 위해 스위치를 쓸어 넘깁니다.

업데이트 2 : Play 2.6이 이제 akka-http를 HTTP 서버의 기본 백엔드 구현으로 만듭니다 (Netty는 여전히 옵션으로 제공됨).

Play의 홈 페이지 :

Akka를 기반으로 구축 된 Play는 확장 성이 뛰어난 응용 프로그램을 위해 예측 가능한 최소의 리소스 소비 (CPU, 메모리, 스레드)를 제공합니다.

Akka가 Play에서 어떻게 사용되고 어디에서 사용되는지 정확히 알고 싶습니다. Play가 Akka 위에 구축 된 결과는 무엇입니까?


채팅 서버를 한 레벨 위로 추상화하면 대답을 얻을 수 있습니다.

Akka는 얼랑 (Erlang)의 "추락시키는 (let it crash)"정신과 비슷한 메시징 시스템을 제공합니다.

따라서 사례는 다양한 수준의 내구성과 신뢰성을 필요로하는 것입니다.

  • 채팅 서버
  • MMO를위한 네트워크 계층
  • 금융 데이터 펌프
  • iPhone / 모바일 / 어떤 앱을위한 알림 시스템
  • REST 서버
  • 어쩌면 WebMachine (추측)과 비슷한 것일 수 있습니다.

Akka에 대한 좋은 점은 지속성, STM 구현, REST 서버 및 내결함성을위한 선택입니다.

채팅 서버의 예에 짜증을 내지 말고, 특정 종류의 솔루션에 대한 예라고 생각하십시오.

훌륭한 문서를 모두 사용하여이 정확한 질문, 유스 케이스 및 예제가 부족한 것처럼 느껴집니다. 예제는 아주 드문 사항입니다.

(비디오를보고 소스를 가지고 노는 경험으로 작성된, 나는 akka를 사용하여 아무것도 구현하지 않았다.)







scala playframework akka