我有一個負責解析和導入CSV文件的路由的Express.js服務器。Streaming Node.js通過XHR對客戶端的響應
我想將導入過程的狀態實時回報給用戶的瀏覽器。
從Express.js流反應是直截了當:
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)
});
發送HTTP請求到端點通過捲曲按預期工作。在上述示例中,立即收到兩個流式響應 ,然後在兩秒鐘後收到最終響應。
但是,瀏覽器(Chrome)並非如此。使用jQuery $.ajax
和一個原始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