可以向我的 nodejs 服务器发出的一些请求需要大量处理(例如:5000 个文件)。由于请求需要一段时间来处理,我想在浏览器中显示进度。为此,我正在使用 io-socket。服务器定期将进度提前发送给客户端,例如ioSocket.emit("log", "progress 24%)
.
但是,如果向客户端发送进度通常可以工作,那么当有大量文件时,它就不行了。没有任何东西发送到浏览器。
我确定该过程进展顺利,因为我将进度记录到节点终端,并且它按预期显示。
我想知道如何让 ioSocket.emit 事件在重负载情况下工作,因为这是查看进度最有用的地方。
文件处理函数如下所示:
var child_process = require("child_process");
function (ioSocket) {
ioSocket.emit("log", "start")
var ratingCounts = 0;
var listOfFilesRatings = []
_.each(listOfFilesPaths, function(path, i){
child_process.exec("exiftool -b -Rating "+ path, function(err, stdout){
if (err) console.log(err)
else {
listOfFilesRatings.push(stdout);
ratingCounts++;
ioSocket.emit("log", "rating test progress "+ ratingCounts)
};
});
ioSocket.emit("log", "each progress "+ i)
});
}
在这个例子中,只有第一个“开始”发射将被触发到浏览器。
但是,如果我执行以下操作:
function (ioSocket) {
ioSocket.emit("log", "start")
for (i=0; i<1000; i++) {
ioSocket.emit("log", "each progress "+ i)
};
}
一切正常,我将“开始”和所有“每个进度”发送到浏览器。