2014-04-28 4 views
3

저는 웹 개발에 익숙하지 않고 약간의 문제가 있습니다. 웹 사이트를 만들기 위해 스프레이와 함께 스카 akka를 사용하고 있습니다. 나의 리더는 나에게 질문을주고 :이스레드를 빠르게 실행하는 방법은 무엇입니까?

case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => { 
    Thread.sleep(10) 
    sender ! HttpResponse(entity = "this is t2") 
} 

Thread.sleep를 같은 반응을 (10) constanst 처리 시간에 무거운 스레드를 나타내고있다가 느린 1000times 실행 전체 프로그램을 만들 수 있도록, 10ms의이다, 그래서 10 배나 더 많은 HTTPRequest를 검색하도록하려면 어떻게해야합니까? 그것을 할 수있는 뭔가를

+0

Akka의 스케줄러 개념을 살펴보십시오. http://doc.akka.io/docs/akka/snapshot/scala/scheduler.html 'Thread.sleep'보다 훨씬 나은 대안입니다. 스케줄러는 백그라운드에서 실행되므로 웹 요청을 처리하는 기본 스레드 풀에 영향을 미치지 않습니다. – Mik378

+0

스케줄러와 관련된 webSocket이 Ping 기능을 처리하는 것이 좋습니다. 여기에 (Heroku로부터 독립 한) 예제가 있습니다 : https://devcenter.heroku.com/articles/play-java-websockets – Mik378

+0

지원해 주셔서 감사 합니다만, "Thread.sleep (10)은 constanst 처리 시간은 10ms입니다. " 그래서 문제의 웹 사이트 속도를 어떻게 높입니까? – user3571374

답변

1

한 가지 방법을 힌트는 배우를 사용했지만 어떻게 든 전체 문서를 읽을 수는 있지만 아직 행방 불명 :

case HttpRequest(GET, Uri.Path("/ping"), _, _, _) => { 
    val replyTo = sender 
    Future { 
     someCPUIntensiveFunction() 
     replyTo ! HttpResponse(entity = "this is t2") 
    } 
} 

기본적으로, 당신은 "무거운 기능의"미래로 전화를 이동합니다. 그러면 HttpRequest를받는 현재 스레드가 미래를 만드는 즉시 진행되고 다음 HttpRequest를 처리 할 수 ​​있습니다. 미래는 별도의 스레드에서 코드를 실행할 것입니다. 따라서 프로그램에는 두 가지 "경로"가 있습니다. 하나는 HttpRequest를 처리하고 다른 하나는 실행합니다. someCPUIntensiveFunction()

+0

당신의 지원에 감사드립니다 :)) 나는 미래를 사용했지만 그 대답은 아닙니다, 그는 내가 overthinking다고 말했고 나는 단 하나의 스레드 만 사용해야한다고 말했다. 나는 배우와 무언가를 놓친 것 같아서 다시 읽으려고한다. – user3571374

+0

@ user3571374 나는 대답을 업데이트했다. –

+0

감사합니다. – user3571374

관련 문제