如何使用使用playframework库的Scala独立应用程序
我有这个简单的测试
Scala应用程序,这是一个阻止http请求:
build.sbt name := "hello" version := "1.0" scalaVersion := "2.11.2" libraryDependencies += "com.typesafe.play" %% "play-ws" % "2.4.0-M1" Test.scala import play.api.libs.json._ import play.api.libs.ws._ import scala.concurrent.duration.Duration import scala.concurrent.{Await,Future} object Test { def main(args: Array[String]) = { val wsClient = WS.client val body = getBody(wsClient.url("http://example.com/").get()) println(s"body: $body") } def getBody(future: Future[WSResponse]) = { val response = Await.result(future,Duration.Inf); if (response.status != 200) throw new Exception(response.statusText); response.body } } 此应用程序失败: 如何解决这个问题? 解决方法
播放2.5的编辑:
import akka.actor.ActorSystem import akka.stream.ActorMaterializer import play.api.libs.ws._ import play.api.libs.ws.ahc.AhcWSClient import scala.concurrent.Future object Main { import scala.concurrent.ExecutionContext.Implicits._ def main(args: Array[String]): Unit = { implicit val system = ActorSystem() implicit val materializer = ActorMaterializer() val wsClient = AhcWSClient() call(wsClient) .andThen { case _ => wsClient.close() } .andThen { case _ => system.terminate() } } def call(wsClient: WSClient): Future[Unit] = { wsClient.url("http://www.google.com").get().map { response => val statusText: String = response.statusText println(s"Got a response $statusText") } } } 请参见: > https://www.playframework.com/documentation/2.5.x/ScalaWS#using-wsclient 有关独立WSClient用法的更多详细示例.如果要从早期版本迁移,请参阅https://www.playframework.com/documentation/2.5.x/Migration25#Play-WS-upgrades-to-AsyncHttpClient-2 玩2.4: 不要为HTTPS使用原始的AsyncHttpClientConfig.Builder – 它不配置具有主机名验证的安全SSLContext. 您可以使用以下代码创建新的WSClient实例: import play.api.libs.ws.ning._ import play.api.libs.ws._ val config = new NingAsyncHttpClientConfigBuilder(DefaultWSClientConfig()).build() val builder = new AsyncHttpClientConfig.Builder(config) val wsClient:WSClient = new NingWSClient(builder.build()) 请注意,这将启动在您关闭客户端之前不会关闭的线程: wsClient.underlying[NingWSClient].close() 如果没有关闭它,您可能会遇到内存泄漏. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |