【发布时间】:2016-06-28 06:26:03
【问题描述】:
我有一个 Express.js 服务器,其路由负责解析和导入 CSV 文件。
我想将导入过程的状态实时报告回用户的浏览器。
来自 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 )
} );
通过 CURL 向端点发送 HTTP 请求按预期工作。在上面的示例中,两个流式响应 立即收到,两秒后有最终响应。
但在浏览器 (Chrome) 中情况并非如此。 使用 jQuery $.ajax 和原始 XHR 调用进行测试,整个
响应完成后,响应似乎被缓冲并立即返回。
通常如何处理这种类型的通信?我认为 socket.io 是一个选项,但肯定有一个更简单的 如何利用浏览器的 build int XHR 或 XHR2 功能?
【问题讨论】:
-
不相信进程目前可以使用
XHR单独使用单个请求,但应该可以使用多个请求。见stackoverflow.com/questions/35899536/…。 -
另见github.com/yutakahirano/fetch-with-streams/issues/30。您可以从服务器请求,直到收到文件的总字节数,然后在客户端重新组装文件。
-
感谢@guest271314 提供的链接 - 这些都表明目前无法通过 XHR 进行流式传输
标签: javascript jquery node.js express socket.io