Scala 如何防止启动时喷洒运行路由器?
考虑下面的代码:Scala 如何防止启动时喷洒运行路由器?,scala,spray,Scala,Spray,考虑下面的代码: import akka.actor.{ActorSystem, Props} import akka.io.IO import spray.can.Http object Main extends App { implicit val system = ActorSystem() val handler = system.actorOf(Props[DemoServiceActor], name = "handler") IO(Http) ! Http.Bi
import akka.actor.{ActorSystem, Props}
import akka.io.IO
import spray.can.Http
object Main extends App {
implicit val system = ActorSystem()
val handler = system.actorOf(Props[DemoServiceActor], name = "handler")
IO(Http) ! Http.Bind(handler, interface = "localhost", port = 8080)
}
import akka.actor.Actor
import spray.routing.HttpService
class DemoServiceActor extends Actor with DemoService {
def actorRefFactory = context
def receive = runRoute(demoRoute)
}
trait DemoService extends HttpService {
implicit def executionContext = actorRefFactory.dispatcher
def demoRoute = {
path("test") {
get {
println("ping")
complete("test complete")
}
}
}
}
当
main
运行它时,打印到控制台ping
。为什么?如何解决此问题?这是意料之中的,请参阅spray.io/documentation/1.2.2/spray routing/advanced topics/undersing dsl structure/。路线结构应尽可能地进行评估。要么将内容放入complete
指令(complete{println(“ping”);“testcomplete”}
),要么使用dynamic
指令()由于这是spray的路由DSL中迄今为止最令人惊讶的事情,也是我们在akka http中更改行为的最常见问题,请参阅以获取更多信息。