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のようなライブラリを見てきましたが、シリーズを作成してすべてのファイルチャンクが入ったら実行するのではなく、入ってくるたびにそれぞれを処理できるようにしたいと思っています。 、だからどんなポインタも素晴らしいです。