【问题标题】:How is each connection handled in play framework 2?在 play framework 2 中如何处理每个连接?
【发布时间】:2013-03-04 22:36:04
【问题描述】:

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

【问题讨论】:

    标签: java playframework-2.0 playframework-2.1


    【解决方案1】:

    当他们说 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() 方法发送消息并且不等待响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多