Как работает спрей-рассылка spray.routing.HttpService?
Отказ от ответственности: у меня пока нет опыта работы с scala, поэтому мой вопрос связан с очень основами.
Рассмотрим следующий пример (он может быть неполным):
import akka.actor.{ActorSystem, Props}
import akka.io.IO
import spray.can.Http
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.duration._
import akka.actor.Actor
import spray.routing._
import spray.http._
object Boot extends App {
implicit val system = ActorSystem("my-actor-system")
val service = system.actorOf(Props[MyActor], "my")
implicit val timeout = Timeout(5.seconds)
IO(Http) ? Http.Bind(service, interface = "localhost", port = 8080)
}
class MyActor extends Actor with MyService {
def actorRefFactory = context
def receive = runRoute(myRoute)
}
trait MyService extends HttpService {
val myRoute =
path("my") {
post {
complete {
"PONG"
}
}
}
}
Мой вопрос: что на самом деле происходит, когда контроль достигаетcomplete
блок? Вопрос кажется слишком общим, поэтому позвольте мне его разделить.
complete
?Если р. 1 верно и р. 2 будет блокировать, как я могу отправлять запросы на использование всех процессоров? Я вижу два пути: актер за запрос и актер за соединение. Второй кажется разумным, но я не могу найти способ сделать это с помощью библиотеки спреев.Если предыдущий вопрос не имеет значения, будетdetach
директива делать? А как насчет передачи функции, возвращающей Futurecomplete
Директива? В чем разница между отсоединением и передачей функции, возвращающей будущее?Как правильно настроить количество рабочих потоков и балансировать запросы / соединения?Было бы здорово, если бы вы указали мне объяснения в официальной документации. Это очень обширно, и я считаю, что я что-то упустил.
Спасибо.