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中更改行为的最常见问题,请参阅以获取更多信息。