javascript - Node.js:管道流到响应在 HTTPS 上卡住

标签 javascript node.js

我正在尝试使用 Connect提供静态内容,但对于大文件(> 40KB),发送第一个 40,960 字节的 block (有时 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

已在 Node 0.6.4 中修复!

关于javascript - Node.js:管道流到响应在 HTTPS 上卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8257544/

相关文章:

javascript - 不同图像(图像网格)的宽度和高度修复,即使在 Bootrap 中窗口大小发生变化

javascript - Ember JS 如何实现一个普通的 ES6 类

windows - 离线安装socket.io

Javascript将元素插入循环内,不会影响循环外的数组

javascript - 无法在 WSL 中运行 Electron Quick Start

javascript - 两个 div 的 z-index 问题,其中一个具有绝对位置

javascript - 使用 Jest,在 vue.js 中对单个文件组件进行单元测试时如何监视扩展组件的方法

javascript - 在 WordPress 中链接外部 JS 和 CSS 文件

node.js - 我应该将 JWT token 存储在 redis 中吗?

javascript - 如何检查 Node js 中是否存在模块函数