【发布时间】:2017-09-17 17:18:29
【问题描述】:
我正在尝试将这段使用 Play 版本 2.4 的代码转换为当前版本 (2.6),但我遇到了一些问题,因为我仍然是 Scala 的菜鸟。
def wsWeatherIntervals = WebSocket.using[String] {
request =>
val url = "http://api.openweathermap.org/data/2.5/weather?q=Amsterdam,nl"
val outEnumerator = Enumerator.repeatM[String]({
Thread.sleep(3000)
ws.url(url).get().map(r => s"${new java.util.Date()}\n ${r.body}")
})
(Iteratee.ignore[String], outEnumerator)
}
我关注了this guide,但现在我被困在应该返回该方法的内容上。 这是我尝试使用 2.6 版运行的代码:
import play.api.mvc._
import scala.concurrent.Future
import akka.stream.scaladsl._
def wsWeatherIntervals = WebSocket.accept[String, Future[String]] { res =>
val url = "http://api.openweathermap.org/data/2.5/weather?q=Amsterdam,nl"
val source = Source.repeat({
Thread.sleep(3000)
ws.url(url).get().map(r => s"${new java.util.Date()}\n ${r.body}")
})
Flow.fromSinkAndSource(Sink.ignore, source)
}
但是我在运行服务器时遇到了这个错误,它指向方法的第一行:
could not find implicit value for parameter transformer: play.api.mvc.WebSocket.MessageFlowTransformer[String,scala.concurrent.Future[String]]
注意:我也尝试调用WebSocket.apply 而不是WebSocket.accept,并且我搜索了两者之间的差异,但没有找到任何有用的信息。有人可以解释两者之间的区别吗?谢谢。
【问题讨论】:
标签: scala websocket playframework-2.4 playframework-2.6 playframework-webservice