2013-03-04 75 views
4

我收到有關如何播放2架構的混合信息。它在網站上說,它建立在阿卡上,這很可能意味着它在每個連接上使用一個演員?它還表示不要編寫阻止代碼,因爲它阻止其他事件在不同連接中觸發(類似於它如何阻止node.js中的事件循環)。那怎麼可能,因爲阻止1個actor中的代碼不會阻塞另一個actor中的代碼?這不就是使用actor與node.js之類的回調嗎?每個連接在播放框架2中如何處理?

回答

2

當他們說Play是建立在Akka之上的時候,他們指的是框架而不是網絡服務器。連接由JBoss Netty(http://netty.io/)處理,它是嵌入式網絡服務器。

連接可以是有界的(或不)到阿卡演員是提供一種異步響應如下所述:http://www.playframework.com/documentation/2.1.0/JavaAkka

參與者之間的通信是非阻塞因爲他們發送消息(任何對象)和別等待迴應(他們不會調用與不同演員交流的方法)。

的邏輯是類似:

//somewhere in the code 
ActorB.tell(new Request(...)); 
----------------------------------------- 
ActorB: 

    public void onReceive(Object msg) throws Exception { 
     if (msg instanceof Request) { 
      //process the request 
      ActorA.tell(new Response(...)) 
     } 
    } 
---------------------------------------------------------------- 
ActorA: 

    //ActorA is notified 
    public void onReceive(Object msg) throws Exception { 
     if (msg instanceof Response) { 
      System.out.println("Response: " + msg) 
     } 
    } 

的方法告訴()發送該消息,並且不等待響應。