§アプリケーションへのNettyサーバーの埋め込み
Playアプリケーションは、通常、独自のコンテナとして使用されますが、既存のアプリケーションにPlayサーバーを埋め込むこともできます。これは、TwirlテンプレートコンパイラとPlayルートコンパイラと組み合わせて使用できますが、もちろん必須ではありません。一般的なユースケースは、単純なルートが少数のアプリケーションです。Nettyサーバーを埋め込んで使用するには、次の依存関係が必要です。
libraryDependencies ++= Seq(
nettyServer
)
Play Nettyサーバーを起動する1つの方法は、NettyServer
ファクトリメソッドを使用することです。単純なルートを提供するだけで済む場合は、fromRouterWithComponents
メソッドと組み合わせて文字列補間ルーティングDSLを使用することを決定する場合があります。
import play.api.mvc._
import play.api.routing.sird._
import play.core.server._
val server = NettyServer.fromRouterWithComponents() { components =>
import components.{ defaultActionBuilder => Action }
{
case GET(p"/hello/$to") =>
Action {
Results.Ok(s"Hello $to")
}
}
}
デフォルトでは、これは本番モードでポート9000でサーバーを起動します。ServerConfig
を渡すことで、サーバーを設定できます。
import play.api.mvc._
import play.api.routing.sird._
import play.core.server._
val server = NettyServer.fromRouterWithComponents(
ServerConfig(
port = Some(19000),
address = "127.0.0.1"
)
) { components =>
import components.{ defaultActionBuilder => Action }
{
case GET(p"/hello/$to") =>
Action {
Results.Ok(s"Hello $to")
}
}
}
Playはまた、ルーター以外にも他のコンポーネントをカスタマイズすることを容易にするコンポーネントトレイトを提供します。NettyServerComponents
トレイトはこの目的のために提供されており、BuiltInComponents
と組み合わせて必要なアプリケーションを構築できます。この例では、DefaultNettyServerComponents
を使用します。これは、NettyServerComponents with BuiltInComponents with NoHttpFiltersComponents
と同等です。
import play.api.http.DefaultHttpErrorHandler
import play.api.mvc._
import play.api.routing.Router
import play.api.routing.sird._
import play.core.server._
import scala.concurrent.Future
val components = new DefaultNettyServerComponents {
lazy val router = Router.from {
case GET(p"/hello/$to") =>
Action {
Results.Ok(s"Hello $to")
}
}
override lazy val httpErrorHandler: DefaultHttpErrorHandler =
new DefaultHttpErrorHandler(environment, configuration, devContext.map(_.sourceMapper), Some(router)) {
protected override def onNotFound(request: RequestHeader, message: String) = {
Future.successful(Results.NotFound("Nothing was found!"))
}
}
}
val server = components.server
ここで実装する必要がある唯一のメソッドはrouter
です。その他のすべてには、上記のhttpErrorHandler
の場合のように、メソッドをオーバーライドすることでカスタマイズできるデフォルトの実装があります。サーバー構成は、serverConfig
プロパティをオーバーライドすることでオーバーライドできます。
サーバーを起動した後に停止するには、単にstop
メソッドを呼び出します。
server.stop()
注: Playを起動するには、アプリケーションシークレットを設定する必要があります。これは、アプリケーションで
application.conf
ファイルを提供するか、play.http.secret.key
システムプロパティを使用して設定できます。
§ロギング設定
Nettyを埋め込みサーバーとして使用する場合、デフォルトではロギングの依存関係は含まれません。埋め込みアプリケーションにもロギングを追加する場合は、Play logbackモジュールを追加できます。
libraryDependencies ++= Seq(
logback
)
その後、LoggerConfigurator
APIを呼び出します。
import play.api.mvc._
import play.api.routing.Router
import play.api.routing.sird._
import play.api._
import play.core.server._
val environment = Environment.simple(mode = Mode.Prod)
val context = ApplicationLoader.Context.create(environment)
// Do the logging configuration
LoggerConfigurator(context.environment.classLoader).foreach {
_.configure(context.environment, context.initialConfiguration, Map.empty)
}
val components = new DefaultNettyServerComponents {
override def router: Router = Router.from {
case GET(p"/hello/$to") =>
Action {
Results.Ok(s"Hello $to")
}
}
}
val server = components.server
次: 一般的なトピック
このドキュメントに誤りが見つかりましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを送信してください。質問やアドバイスがあれば、コミュニティフォーラムにアクセスして、コミュニティとの会話を始めてください。