我有一个使用Transfer-Encoding: Chunked的Node.js应用程序Transfer-Encoding: Chunked通过HTTP连续传输数据,直到客户端断开连接。 运行Node的本地实例时,它可以正常工作,但在部署到Azure App Service(通过iisnode运行Node应用程序)时,客户端连接将不会收到数据。
logging表明Node应用程序正在处理请求并正确传输数据,但由于某些原因数据未到达客户端。
以下是我从节点stream式传输数据的简单示例:
var server = http.createServer(); server.on('request', function(request, response) { var interval = setInterval(function() { response.write("some data\r\n"); }, 1000); request.on('close', function() { clearInterval(interval); }); }); server.listen(config.port);
在我的iisnode.ymlconfiguration文件中,我设置了flushResponse: true来防止iisnode缓冲响应块。
我的猜测是,IIS正在尝试缓冲整个响应之前发送,但我不知道如何禁用此行为。
我假设你在虚拟机上运行IIS(不要使用Azure应用程序服务)。
这个SO问题给出了一些指导如何禁用IIS响应缓冲(又名AspBufferingOn )。
基本上你需要安装ASPfunction ,这个选项将显示在IISpipe理器中(详情见这里 )。
on('request', function(request, response) { var interval = setInterval(function() { response.write("some data\r\n"); }, 1000); request.on('close', function() { clearInterval(interval); } }