Play Framework を始めたばかりの方向けに、サンプルを進めるうえで困ったところを共有する目的で書いています。
Play Framework 2.8.x とAkka Typed を使ったServer-Sent Events を実装したときのメモです。 この記事と play-streaming-scala のサンプルを参考にしています。
以下、目次
前提
- 「Play FrameworkでServer-Sent Events(SSE)を使ってServer pushする方法あれこれ」の「Source.actorRef()による実装」を、設計を簡易化しAkka Typed で実装(参考記事は、Akka Classic)
- 簡易化した内容:チャットアプリケーション→ボタンを押したらランダムに文字列を表示
見た目
実装の詳細
大まかな設計は、参考記事の「Source.actorRef()による実装」を踏襲しています。
実際に実装してみると、追加で以下の変更が必要でした。
- ブラウザを閉じたときに、対応する
Source.actorRef
を終了するために、PlayAkkaHttp2Support
Plugin を設定する必要がある (Http2 での接続をしたいわけではなく、Plugin を設定しないとブラウザを閉じて対応するSource.actorRef
を終了しなかった。なぜだろう?) - ActourSource.actorRef を使うため、Akka のバージョンを
2.6.15
にする必要がある
application.conf
lazy val root = (project in file(".")).enablePlugins(PlayScala, PlayAkkaHttp2Support) // lazy val root = (project in file(".")).enablePlugins(PlayScala) val akkaVersion = "2.6.15" // Akka dependencies used by Play libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-serialization-jackson" % akkaVersion, "com.typesafe.akka" %% "akka-stream-typed" % akkaVersion, "com.typesafe.akka" %% "akka-actor-testkit-typed" % akkaVersion % Test )
Heroku 公開はこちら
以上でした。