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