gpt4 book ai didi

scala - Spray.io - 将处理委托(delegate)给另一个参与者

转载 作者:行者123 更新时间:2023-12-04 15:34:11 28 4
gpt4 key购买 nike

我使用 Spray.io 框架实现了一个 REST 服务。此类服务必须接收一些“搜索”查询,对其进行处理并将结果发送回客户端。执行搜索的代码位于单独的参与者 - SearchActor 中,因此在接收到来自用户的 (JSON) 查询后,我将此查询重新发送(使用询问模式)到我的 SearchActor。但我不太明白我必须如何实现spray.io 路由actor 和我的SearchActor 之间的交互。

我在这里看到了几个变体,但哪个更正确,为什么?

  • 在启动时创建一个 SearchActor 实例,并将每个请求发送到此 Actor
  • 为每个请求创建 SearchActor
  • 的新实例
  • 在启动时创建 SearchActor Actor 池并向该池发送请求
  • 最佳答案

    您不必被迫使用询问模式。事实上,它会为您的每个请求创建一个线程,这可能不是您想要的。我建议您使用 tell反而。你可以通过产生一个新的 Actor 来做到这一点。对于每个请求(比线程便宜),具有 RequestContext在其构造函数字段之一中。您将使用此上下文返回响应,通常使用其 complete方法。

    示例代码。

    class RESTActor extends HttpService {
    val route = path("mypath") ~ post {
    entity(as[SearchActor.Search]) { search => ctx =>
    SearchActor(ctx) ! search
    }
    }
    }

    case class SearchActor(ctx: RequestContext) {
    def receive = {
    case msg: Search => //... search process
    case msg: Result => ctx.complete(msg) // sends back reply
    }
    }

    关于scala - Spray.io - 将处理委托(delegate)给另一个参与者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23254804/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com