簡體   English   中英

Node.js:響應的管道流通過HTTPS凍結

[英]Node.js: pipe stream to response freezes over HTTPS

我試圖使用Connect來提供靜態內容,但是對於大文件(> 40KB),將發送40,960字節的第一塊(有時為32,940字節),然后傳輸休眠2分鍾,然后傳輸完成。 我發現將流傳輸到響應時會發生這種情況(這是Connect發送響應的方式)。

這是在Windows和Linux上的Node 0.6.2上使用48,980字節文件重現此代碼的代碼:

var fs = require( "fs" ), https = require("https");

var privateKey = fs.readFileSync( 'privatekey.pem' ).toString();
var certificate = fs.readFileSync( 'certificate.pem' ).toString();
var options = {key: privateKey, cert: certificate};
var server = https.createServer( options,
function( req, res ) {
    var path = __dirname + "/public" + req.url;
    fs.stat(path, function(err, stat){
        if( err ) {
            res.writeHead(404, {'Content-Type': 'text/html'});
            res.end(""+err);
        } else {
            res.writeHead(200, {
                'Content-Type': 'text/html',
                'Content-Length': stat.size});
            var stream = fs.createReadStream(path);
            stream.pipe(res);
        }
    } );
} ).listen(8364);

使用fs.readFile ,我無法重現:

var fs = require( "fs" ), https = require("https");

var privateKey = fs.readFileSync( 'privatekey.pem' ).toString();
var certificate = fs.readFileSync( 'certificate.pem' ).toString();
var options = {key: privateKey, cert: certificate};
var server = https.createServer( options,
function( req, res ) {
    fs.readFile(__dirname + "/public" + req.url, function(err, data){
        if( err ) {
            res.writeHead(404, {'Content-Type': 'text/html'});
            res.end(""+err);
        } else {
            res.writeHead(200, {
                'Content-Type': 'text/html',
                'Content-Length': data.length});
            res.end(data);
        } } );
} ).listen(8364);

我做錯什么了嗎?

就是這個問題: https : //github.com/joyent/node/issues/2198

在節點0.6.4中已修復!

我在管道上有非常相似的問題(可能是相關的) Nodejs上的Valums文件上傳器-多個文件上傳

還睡了2分鍾。 找不到管道解決方案可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM