我对这样的事情的偏好是使用 Java,因为我发现像你描述的那样管理后台任务更容易。
后端
我的方法是使用 Java EE 创建一个实现调度程序服务的单例启动线程。使用单例启动线程的原因是您的作业可以作为后台进程运行,因此是非阻塞的,从而为应用程序的其余部分释放资源。也可以使用简单地调用类上的方法来访问线程。您可以安排任务每隔“n”秒/分钟等读取您的文件以获取任何更新,然后可以将这些更新提供给您的前端。
基本示例:
@Singleton
@Startup
public class Scheduler {
private static int count = 0;
private Weather weather;
public Weather getWeather() {
return weather;
}
@PostConstruct
public void onStartup() {
System.out.println("Initialization success.");
}
@Schedule(second="*/10", minute="*", hour="*")
public void execute() {
byte[] encoded = Files.readAllBytes(Paths.get("weather_updates.txt"));
String weatherUpdateStr = encoding.decode(ByteBuffer.wrap(encoded)).toString();
weather = new Weather();
weather.parse(weatherUpdateStr);
// Possible addition of logic for push to web socket
}
}
这个基本示例会在您的 Web 应用程序容器(我建议使用 JBoss 7)启动时创建一个 sigleton 线程。然后它会创建一个每 10 秒执行一次的计划任务。提供的代码将基本的 Java 7 文件读取到字符串,并且weather.parse()
应该包含一些将字符串转换为 Weather 对象的逻辑。然后,天气对象就可以通过 Web 套接字推送或通过前端的一些 AJAX 请求进行轮询。
前端
我会在这里建议两种可能的方法:
- 使用 HTML5 的 Web 套接字
- AJAX 调用
1.网络套接字
Web 套接字被引入 HTML5 作为一种在页面上提供动态内容而无需刷新或使用 AJAX 调用的方式。这是对 HTML5 中的 websockets 的一个很好的介绍。这是另一个如何使用 Java 设置 HTML5 websockets 的好例子。
2. AJAX 调用
jQuery 为 AJAX 提供了一个很棒的 API。你可以在 jQuery 中实现一个Timeout任务,它会间歇性地执行一些功能。您将要实现的功能是AJAX Get request。
基本示例:
$.ajax({
url: "getWeatherUpdate.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
// Update your webpage with weather info
},
timeout: 3000 // sets timeout to 3 seconds
});