我正在开发一个Web应用程序,其中我有一个持续的数据流,每隔5秒左右就在一个java servlet中接收(从另一个应用程序写入的文件中读取)。我想将这些数据推送到一个html页面并在javascript中读取,这样我就可以在d3库中绘制它。
目前我正在使用调用' doGet'的javascript函数。 servlet的功能每5秒钟一次。我担心这会产生很多开销,或者说它可以更有效地执行。 我知道它也可以运行" response.setIntHeader(" Refresh",5);"来自servlet。
还有其他更好的方法吗?
提前感谢您的帮助!
答案 0 :(得分:0)
短轮询目前可能是解决您所描述问题的最常用方法
如果你可以应对通知中的几秒延迟,那么短轮询非常简单,这是一个基本的例子:
在页面加载时,在JS中调用它:
setInterval(checkFor, 30000);
以上将每隔30秒调用一次函数checkFor()(显然,您可以将30秒更改为任何时间长度 - 只需根据您希望用户更新的常规方式调整上述行中的30000)。
然后,在checkForNotifications函数中,只需对服务器进行ajax调用,询问是否有任何更新 - 如果服务器显示yes,则只显示使用JS的警报,如果没有(大部分时间都是可能)然后什么都不做:
function checkFor(){
$.ajax({
url: "your/server/url",
type: "POST",
success: function( notification ) {
//Check if any notifications are returned - if so then display alert
},
error: function(data){
//handle any error
}
});
}