在尝试学习 node.js/socket.io 时,我一直在搞乱创建一个简单的文件上传器,它从客户端浏览器获取数据块并在服务器端重新组装。
用于接收块的 socket.io 事件如下所示:
socket.on('sendChunk', function (data) {
fs.appendFile(path + fileName, data.data, function (err) {
if (err)
throw err;
console.log(data.sequence + ' - The data was appended to file ' + fileName);
});
});
问题是由于异步调用,数据块不一定按照接收顺序附加。典型的控制台输出如下所示:
- 1 - 数据附加到文件 testfile.txt
- 3 - 数据附加到文件 testfile.txt
- 4 - 数据附加到文件 testfile.txt
- 2 - 数据附加到文件 testfile.txt
我的问题是,以非阻塞方式实现此功能但强制执行顺序的正确方法是什么。我看过像async这样的库,但我真的希望能够处理每一个库,而不是创建一个系列并在所有文件块都进入后运行。我仍然试图围绕所有这些事件驱动流,所以任何指针都很棒。