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

Mik*_*hyn 2 continuations playframework

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

"for dummies"格式的任何文档和理论也受到赞赏.

Cod*_*nci 7

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

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

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

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

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

// do some logic
await(timeout or promise);
// continue the execution
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 我发现做你想做的最简单的方法是扩展Job,并使用`new myJob().now()`,它返回一个promise(参见http://www.playframework.org/documentation/) 1.2.3 /作业#任务).但是,如果使用Job对你没有意义,那么请查看now()方法的代码,看看它如何创建Promise,作为指导. (3认同)