相关疑难解决方法(0)

Node.js:分块传输编码

该代码是否有效HTTP/1.1?

var fs = require('fs')
var http = require('http')

var buf=function(res,fd,i,s,buffer){
 if(i+buffer.length<s){
  fs.read(fd,buffer,0,buffer.length,i,function(e,l,b){
   res.write(b.slice(0,l))
   //console.log(b.toString('utf8',0,l))
   i=i+buffer.length
   buf(res,fd,i,s,buffer)
  })
 }
 else{
  fs.read(fd,buffer,0,buffer.length,i,function(e,l,b){
   res.end(b.slice(0,l))
   fs.close(fd)
  })
 }
}

var app = function(req,res){
 var head={'Content-Type':'text/html; charset=UTF-8'}
 switch(req.url.slice(-3)){
  case '.js':head={'Content-Type':'text/javascript'};break;
  case 'css':head={'Content-Type':'text/css'};break;
  case 'png':head={'Content-Type':'image/png'};break;
  case 'ico':head={'Content-Type':'image/x-icon'};break;
  case 'ogg':head={'Content-Type':'audio/ogg'};break;
  case 'ebm':head={'Content-Type':'video/webm'};break;
 }
 head['Transfer-Encoding']='chunked'
 res.writeHead(200,head)
 fs.open('.'+req.url,'r',function(err,fd){
  fs.fstat(fd,function(err, stats){
   console.log('.'+req.url+' '+stats.size+' '+head['Content-Type']+' '+head['Transfer-Encoding'])
   var buffer = new Buffer(100)
   buf(res,fd,0,stats.size,buffer)
  })
 })
}

http.createServer(app).listen(8000,"127.0.0.1")
console.log('GET http://127.0.0.1:8000/appwsgi/www/index.htm')
Run Code Online (Sandbox Code Playgroud)

我想我在这里违反了HTTP/1.1?文本文件确实可以正常工作,但这可能是巧合.我的标题是"200 OK"还是需要它为"100"?一个标题是否足够?

node.js

9
推荐指数
2
解决办法
3万
查看次数

使用NodeJS流式传输Http响应

我正在试验一个简单的NodeJS HTTP服务器的各种响应.我想要实现的效果是更快的网页视觉呈现.由于响应是通过transfer-encoding: chunked(右?)流式传输到浏览器的,我以为我可以先渲染页面布局,然后在延迟后再渲染其余的数据.

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {
        'Content-Type': 'text/html'
        , 'Transfer-Encoding': 'chunked'
    });
    res.write('<html>\n');
    res.write('<body>\n');
    res.write('hello ');
    res.write('</body>\n');
    res.write('</html>\n');
    setTimeout(function () {
        res.end('world');
    },1500);
}).listen(3000, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

问题是,res.end('world')除非已经写入的数据足够长,否则似乎没有发送响应,所以例如res.write(new Array(2000).join('1'))而不是那样res.write('hello'),就可以做到这一点.

Node是否会缓冲我的写入,直到数据足够大才能发送?如果是这种情况,块大小是否可配置?

streaming http transfer-encoding node.js

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

node.js ×2

http ×1

streaming ×1

transfer-encoding ×1