我有一个 Node.js 应用,它用于Transfer-Encoding: Chunked
通过 HTTP 持续传输数据,直到客户端断开连接。在运行 Node 的本地实例时,它运行良好,但当部署到 Azure 应用服务(通过iis节点),客户端连接挂起而从未接收数据。
日志记录表明 Node 应用程序正在正确处理请求和流数据,但由于某种原因,数据未到达客户端。
下面是我从 Node 流式传输数据的方式的一个简化示例:
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.yml
配置文件中我已设置flushResponse: true
为防止 iisnode 缓冲响应块。
我的猜测是 IIS 尝试在发送之前缓冲整个响应,但我不知道如何禁用此行为。
答案1
我遇到了完全相同的问题。设置flushResponse
为 true web.config
- 请参阅https://github.com/tjanczuk/iisnode/blob/master/src/samples/configuration/web.config以获得完整的选项列表。
因此,你应该在web.config
:
<iisnode flushResponse="true"/>
答案2
答案3
on('request', function(request, response) {
var interval = setInterval(function() {
response.write("some data\r\n");
}, 1000);
request.on('close', function() {
clearInterval(interval);
}
}