实时处理巨大而缓慢的传入ajax响应
我正在尝试将AJAX请求作为Web应用程序的一部分来实现。 服务器端需要很长时间才能完全处理请求,但它可以很早输出结果的单个项。 因此,我的意图是让客户端在响应部分到达时立即呈现它们,而不是等到响应完成 以下是我的(简化)服务器端代码:实时处理巨大而缓慢的传入ajax响应,ajax,jquery,Ajax,Jquery,我正在尝试将AJAX请求作为Web应用程序的一部分来实现。 服务器端需要很长时间才能完全处理请求,但它可以很早输出结果的单个项。 因此,我的意图是让客户端在响应部分到达时立即呈现它们,而不是等到响应完成 以下是我的(简化)服务器端代码: for (myObj o : db.results()) { // some rather slow operations at this place JSONObject j = new JSONObject(); j.put("tag
for (myObj o : db.results()) {
// some rather slow operations at this place
JSONObject j = new JSONObject();
j.put("tag1", o.tag1());
j.put("tag2", o.tag2());
System.out.println("Sending partial response: " + j.toString() );
response.getWriter().write(j.toString());
response.getWriter().flush();
}
我的客户端jquery请求如下所示:
$.ajax( {
type: "GET",
url: "queryURL",
dataType: "text",
success: function (data) {
alert("received " + data);
}
});
不幸的是,成功函数仅在响应完成后执行。
每次调用response.getWriter().write()
,我都找不到执行函数的方法。
有没有办法做到这一点?尝试实现“AJAX推送”类型的实现可能非常困难
一个简单得多的实现是让AJAX调用在服务器上启动进程,但让服务器在执行任务时将正在进行的结果写入某个文件(即文本、xml等)。您的AJAX成功/完成可能是以设定的间隔(即每5秒)读取此文件,直到到达文件末尾
它不优雅。。。但它很简单,而且很有效 我认为您需要操作服务器端并将响应拆分为小图片。我不认为有一种方法可以满足您的要求,即有效地将响应流式传输到客户端。我认为多个ajax调用是最好的选择。选择websocket或进行长时间轮询。@pdegand59:谢谢-websocket提示看起来很有希望@Archer/Alepac:是的,我考虑过多个ajax调用或拆分响应,但这会在服务器端带来更多的开销。我不太喜欢这种方法,因为它会增加服务器端的开销,而且不是很优雅(如您所说)。我想我会尝试像PDEGAND59建议的WebSoCK通信,不用担心,这只是另一个选择。我过去就这样做过,在某些情况下(例如,低使用组件、非常长的流程等),它往往工作得很好,同时实现起来非常简单。