4

我得到了关于 play 2 如何构建的混合信息。它在网站上说它是建立在 akka 上的,这很可能意味着它每个连接都使用一个演员?它还说不要编写阻塞代码,因为它会阻止其他事件在不同的连接中触发(有点像它如何阻止 node.js 中的事件循环)。这怎么可能,因为阻止 1 个参与者的代码不会阻止另一个参与者的代码?这不就是使用actor 与node.js 之类的回调的重点吗?

4

1 回答 1

2

当他们说 Play 建立在 Akka 之上时,他们的意思是框架而不是网络服务器。连接由作为嵌入式 Web 服务器的 JBoss Netty ( http://netty.io/ ) 处理。

连接可以绑定(或不绑定)到 Akka Actor 以提供异步响应,如下所述:http ://www.playframework.com/documentation/2.1.0/JavaAkka

Actor 之间的通信是非阻塞的,因为它们发送消息(任何对象)并且不等待响应(它们不调用方法与不同的 Actor 通信)。

逻辑与此类似:

//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)
        }
    }

方法 tell() 发送消息并且不等待响应。

于 2013-03-05T22:24:07.067 回答