CSVファイルの解析とインポートを担当するExpress.jsサーバーがあります。XHRを介したクライアントへのNode.js応答のストリーミング
リアルタイムでインポートプロセスのステータスをユーザーのブラウザに報告したいと思います。 Express.jsから
ストリーミング応答単純です:予想通りCURL経由でエンドポイントにHTTPリクエストを送信する
router.get('/test', function(_req, _res, _next) {
_res.write('File import initiated.');
// ... processing CSV in loop
_res.write('Processing row x.');
// artificial delay to simulate some i/o
setTimeout(function() {
_res.write('File import completed successfully.');
_res.end();
}, 2000)
});
で動作します。上記の例では、2つのストリーミングされた応答 が直ちに受信され、2秒後に最後の応答が続きます。
ただし、これはブラウザ(Chrome)では該当しません。 jQuery $.ajax
とraw XHR呼び出しの両方でテストすると、応答が完了すると 応答全体がバッファリングされ、一度にすべて返されます。
通常、このタイプの通信はどのように処理されますか?私はsocket.ioがオプションだと思いますが、ブラウザのint XHRやXHR2の機能を利用する方が簡単です。
現在のところ、複数のリクエストを使用して可能ではあるが、単一のリクエストを使用して 'XHR'だけを使用してプロセスが現在可能であるとは思わない。 http://stackoverflow.com/questions/35899536/method-for-streaming-data-from-browser-to-server-via-http/を参照してください。 – guest271314
https://github.com/yutakahirano/fetch-with-streams/issues/30も参照してください。ファイルの合計バイトが受信されるまでサーバーから要求してから、クライアント側のファイルを再アセンブルすることができます。 – guest271314
https://jakearchibald.com/2016/streams-ftw/#streams-the-fetch-api、http://jsbin.com/vuqasa/edit?js,console – guest271314