我試圖將這個代碼轉換爲使用Play版本2.4到當前版本(2.6),並且我遇到了一些問題,因爲我仍然是一個noob斯卡拉。在Play框架中將WebSockets從2.4版轉換爲2.6
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
,我做了一些關於兩者之間的差異的搜索,但沒有發現任何有用的東西。有人可以解釋兩者之間的區別嗎?謝謝。