4

我正在查看适用于 Java 的 Google App Engine 的新任务队列 API,我很难将其与我的 GWT 应用程序联系起来。如果我想使用任务队列来做一些异步处理,我应该如何使用 GWT 来做到这一点。

我看到它的方式是,我必须发送一个服务器请求,然后将提交到任务队列 API。如果我正确理解任务队列,我将不得不创建另一个 servlet 来从任务队列中进行处理(作为工作人员)。

我正在寻找两件事:

  1. 工人会是一个 Servlet(即 extends HttpServlet)吗?如果没有,有人可以给我一个“工人”的例子吗?
  2. 如果我只想提交异步响应以立即执行,那么使用任务队列真的有意义吗?看来 GWT 内置的 RPC 机制就足够了。
4

2 回答 2

6

是的,worker 将是一个可以处理带有 POST 参数的请求的 servlet。如果您想要从客户端的角度进行异步调用,那么 RPC 就足够了(从服务器的角度来看它仍然是同步的)。如果您想做不与客户交谈的“延迟”工作,您可以使用任务队列。

于 2009-11-18T23:29:05.277 回答
0

延期的.可延期的

Java 中的 deferred.defer 有什么计划吗?

import static com.google.appengine.api.labs.taskqueue.TaskOptions.Builder.taskName;

import java.io.IOException;

import javax.servlet.ServletException;

import com.newatlanta.appengine.taskqueue.Deferred;
import com.newatlanta.appengine.taskqueue.Deferred.Deferrable;

@SuppressWarnings("serial")
public class SampleTask implements Deferrable {

    private String arg1;
    private String arg2;

    public SampleTask() {
    }

    public SampleTask(String arg1, String arg2) {
        // save information to use later
        this.arg1 = arg1;
        this.arg2 = arg2;
    }

    @Override
    public void doTask() throws ServletException, IOException {
        // TODO do work here

        // this is how you 'schedule' a task
        // doing this here is recursive;
        // you most likely want to call this from
        // a server rpc endpoint
        SampleTask task = new SampleTask("arg1", "arg2");
        Deferred.defer(task, "queue-name", taskName("task-name"));
    }
}
于 2010-11-12T18:57:14.793 回答