0

为了在 GWT/Gears 中使用 WorkerPool(Javascript 线程)类和功能,我是否需要同时使用 Java 和 Javascript 编写代码?在检查了WorkerPool - Getting Started和 GWT-Gears-1.1 下载包中的示例 WorkerPool 应用程序后,我似乎需要这样做。似乎 Java 代码用于演示 Javascript 的同步特性,而 Javascript 中的相同算法用于异步调用。

我错过了什么吗?GWT 不是为了让您不必编写 Javascript 代码而创建的吗?为什么不能用 Java 编写 WorkerThread 代码并让编译器将其编译为 Javascript?

以下是该 url 中的相关 Java 代码:

 public void syncWorker(String message) {
// Busy wait for 5 seconds
long end = System.currentTimeMillis() + 5000;
while (true) {
  int busyCounter = 1000;
  String busyVar;
  while (busyCounter-- > 0) {
    busyVar = "garbage" + busyCounter;
  }
  long now = System.currentTimeMillis();
  if (now > end) {
    break;
  }
}
logMessage("Approved: " + message);
}

这是 worker.js 中的相关 Javascript 代码(注意它是如何用 Javascript 编写的相同算法):

function doWork(message) {
// Busy wait for 5 seconds
var start = new Date();
while (true) {
  var busyCounter = 10000;
  var busyVar;
  while (busyCounter-- > 0) {
    busyVar = "garbage" + busyCounter;
  }
  var now = new Date();
  if (now.getTime() - start.getTime() > 5000) {
    break;
  }
 }

 return "Approved: " + message;
 };

这是Java中的调用:

wp = Factory.getInstance().createWorkerPool();
wp.setMessageHandler(GearsWorkerPoolTutorial.this);
workerId = wp.createWorkerFromUrl("worker.js");

任何有 GWT 和 Gears 经验的人都可以对此有所了解吗?

谢谢!

编辑:

根据这个http://markmail.org/message/gxipzth2jheccpha#query:+page:1+mid:sabv4llpymbavt7t+state:results ,我的怀疑似乎是正确的。我不确定我是否理解为什么存在这种限制。我很想阅读有关此事的任何见解。

编辑2:

这似乎也证实了这一点:http ://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/658f6665e5b09bed

4

1 回答 1

1

我从未将 Gears 用于 GWT,但在阅读了您的证据后,我相信您说 WorkerPool 类只能运行 JavaScript 文件而不能运行 Java-compiled-to-JavaScript 是正确的。这是来自 GWT-Gears v1.1.1 WorkerPool API 的引用。

WorkerPool 模块允许 Web 应用程序在后台运行 JavaScript 代码,而不会阻塞主页面的脚本执行。目前这个类只能从原始的 JavaScript 代码中创建工作线程。也就是说,用户代码当前无法从 Java 代码创建工作主体。

WorkerPool 类管理线程和通信,这是一项不小的任务。

于 2009-02-06T00:08:31.587 回答