内容摘要:结合使用 Comet 模式(将数据推到客户机)和 Jetty 6 的 Continuations API(将 Comet 应用程序扩展到大量客户机中)。您可以方便地在 Direct Web Remoting (DWR) 2 中将 Comet 和 Continuations 与 Reverse Ajax 技术结合使用。
编写基于 Continuations 的应用程序
作为实际示例场景,我将开发一个基本的 GPS 坐标跟踪 Web 应用程序。它将在不规则的时间间隔内生成随机的经纬度值对。发挥一下想象力,生成的坐标值可能就是临近的一个公共车站、随身携带着 GPS 设备的马拉松选手、汽车拉力赛中的汽车或者运输中的包裹。令人感兴趣的是我将如何告诉浏览器这个坐标。图 1 展示了这个简单的 GPS 跟踪器应用程序的类图:
图 1. 显示 GPS 跟踪器应用程序主要组件的类图

首先,应用程序需要某种方法来生成坐标。这将由 RandomWalkGenerator 完成。从一对初始坐标对开始,每次调用它的私有 generateNextCoord() 方法时,将从该位置移动随机指定的距离,并将新的位置作为 GpsCoord 对象返回。初始化完成后,RandomWalkGenerator 将生成一个线程,该线程以随机的时间间隔调用 generateNextCoord() 方法并将生成的坐标发送给任何注册了 addListener() 的 CoordListener 实例。清单 6 展示了 RandomWalkGenerator 循环的逻辑:
清单 6. RandomWalkGenerator's run() 方法public void run() {
try {
while (true) {
int sleepMillis = 5000 + (int)(Math.random()*8000d);
Thread.sleep(sleepMillis);
dispatchUpdate(generateNextCoord());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
CoordListener 是一个回调接口,仅仅定义 onCoord(GpsCoord coord) 方法。在本例中,ContinuationBasedTracker 类实现 CoordListener。ContinuationBasedTracker 的另一个公有方法是 getNextPosition(Continuation, int)。清单 7 展示了这些方法的实现:
来源:developerWorks 作者:Philip McCarthy 责编:豆豆技术应用