需要在play框架示例中使用Continuations

时间:2011-10-01 20:44:59

标签: playframework continuations

你能给我一些关于如何在游戏框架中使用延续的好例子的链接吗?(除了游戏框架的来源,他们的'样本和测试'和现场文档,已经存在)

“for dummies”格式的任何文档和理论也受到赞赏。

1 个答案:

答案 0 :(得分:7)

Continuations主要使用通过Controller提供的await()方法。 await方法可以接受两种不同类型的参数(实际上有6种方法的重载,但它们是2个主题的简单变体)。

第一个是超时调用await。这可以是毫秒,或者可以使用表示时间的字符串文字来指定,例如, 1s 1秒等等。

第二个是使用Future对象调用await,并且最常使用Play的java Future实现,称为Promise(在libs.F中)。 Promise在履行承诺时返回,因为作为Promise的一部分调用的事件已完成。但是,Promise可以不仅仅是一个事件,它可以是多个事件。甚至有一些选项可以说waitAny,所以它只等待许多事件中的一个返回。

因此,这两种方法基本上都会导致事件在未来的某个时刻发生。第一个是预先确定的,第二个是取决于实现承诺需要多长时间。

播放延续是一种使此事件结构的编码更容易的方法。您可以输入一些代码

// do some logic
await(timeout or promise);
// continue the execution

在幕后,HTTP线程被释放,因此Play可以更有效地处理更多并发请求。当满足超时或承诺时,该方法继续执行,而不必为再次启动的执行线程编写任何特定处理。

将Play网站上的代码用于延续,它说

public static void loopWithoutBlocking() {
    for(int i=0; i<=10; i++) { 
         Logger.info(i);
         await("1s");
    }
    renderText("Loop finished");
}

这实际上结束了执行的线程10次,并在等待1秒后启动一个新线程。从程序员的角度来看,这一切都是完全透明的,并且允许您直观地构建应用程序而不必担心创建非阻塞应用程序,因为这一切都是由Play神奇地处理的!