博多南ウェブサービスのblog

博多南ウェブサービスのサービス紹介

【Play Framework 2.8.x のServer-Sent Events(SSE) サンプル】Akka Typed を使ってServer push する方法1つ

Play Framework を始めたばかりの方向けに、サンプルを進めるうえで困ったところを共有する目的で書いています。

Play Framework 2.8.x とAkka Typed を使ったServer-Sent Events を実装したときのメモです。 この記事play-streaming-scala のサンプルを参考にしています。

以下、目次

前提

見た目

f:id:hakataminamiWS:20210713154255g:plain
Server-Sent Events の実装

実装の詳細

大まかな設計は、参考記事の「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 公開はこちら

Githubこちら

以上でした。