ข้อจำกัดความรับผิดชอบ: ตอนนี้ฉันไม่มีประสบการณ์สกาล่า ดังนั้นคำถามของฉันจึงเกี่ยวข้องกับพื้นฐานมาก
พิจารณาตัวอย่างต่อไปนี้ (อาจไม่สมบูรณ์):
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 เป็นจริงและ p 2 จะบล็อก ฉันจะส่งคำขอเพื่อใช้ CPU ทั้งหมดได้อย่างไร ฉันเห็นสองวิธี: นักแสดงต่อคำขอ และนักแสดงต่อการเชื่อมต่อ อันที่สองดูเหมือนจะสมเหตุสมผล แต่ฉันไม่สามารถหาวิธีทำได้โดยใช้ไลบรารี่สเปรย์
- หากคำถามก่อนหน้าไม่เกี่ยวข้อง
detach
คำสั่งจะทำหรือไม่ แล้วการส่งฟังก์ชันส่งกลับ Future ไปที่complete
directive ล่ะ? อะไรคือความแตกต่างระหว่างฟังก์ชันแยกและการส่งผ่านที่ส่งคืนอนาคต? - วิธีที่เหมาะสมในการกำหนดค่าจำนวนเธรดการทำงานและคำขอ/การเชื่อมต่อที่สมดุลคืออะไร?
คงจะดีไม่น้อยหากคุณชี้คำอธิบายให้ฉันทราบในเอกสารอย่างเป็นทางการ มันกว้างขวางมากและฉันเชื่อว่าฉันขาดอะไรบางอย่างไป
ขอบคุณ