下面是我有:
- 执行一个长(2-10秒)的计算(分贝+外部API调用)一个Node.js的功能。 我用
async.auto()
来组织我的电话的依赖 - HTML视图页面上一个不错的视觉进度条
- 一个的getJSON函数调用查询(见下面的代码)
现在,我只是更新一个定时器的进度条。 但我想它更准确。 我已经打破了服务器端功能5个里程碑(后即每个外部调用成功完成),我想发送进度信息给客户端。 然而,一旦你res.send(progress)
完成的响应,仅此而已可以在它被发送。
我显然这里需要一个不同的模式,我有一些想法:
- 2个AJAX调用,进步一个投票和第二得到的结果
- 一个呼叫被调用5次,直到服务器端功能不见了
- 完全不同的东西(也许长轮询,的WebSockets,?)
问题:
我想知道有什么推荐的模式,以及如何实现它的服务器和客户端上都。 示例代码或链接到的样品,受到了高度评价!
而且,一如既往,感谢您的时间!
这里包括是代码我迄今(有明显的功能遗漏)。 这不是绝对必要回答这个问题,但我在这里提供它给一些背景。
客户
var searchFunction = function() {
var user = $("#searchTerm").val();
$.getJSON("/search/" + user, function(data) {
console.log(data);
ko.applyBindings(new MyViewModel(data));
});
$("#content").hide();
progressBar(5);
$("#progress_bar").show();
setTimeout(function() {
progressBar(25);
}, 1000);
setTimeout(function() {
progressBar(50);
}, 2000);
setTimeout(function() {
progressBar(75);
}, 3000);
setTimeout(function() {
$("#progress_bar").hide();
$("#content").show();
}, 4000);
};
服务器
var searchFunction = function(req, res) {
async.auto({
f1: function(callback) {
//things happen
callback(err, res);
},
f2: function(callback) {
//things happen
callback(err, res);
},
f3: ['f2', function(callback, result) {
//many things happen
callback(err, res);
},
function(err) {
//decisions are made
callback(null, watchers);
}]
}, function(err, result) {
//more exciting stuff happens
res.send(finalResults);
}
);
};