HTTP Node.js服务器和客户端的API
//HTTP协议建立在请求与响应的概念上,对应在Node.js中即为http.ServerRequest与http.serverResponse
//这两个构造器构造出来的对象
/*
require('http').createServer(function(req, res) {
res.writeHead(200);
res.end('Hello world');
}).listen(3000);
接下来建立telnet连接后
可以输入:$ GET / HTTP/1.1 按两次回车键即可发送请求.
返回信息是:
HTTP/1.1 200 OK
Connection: keep-alive
Transfer-Encoding: chunked
之所以Transfer-Encoding的默认信息为chunked,是因为Node天生的异步机制,这样子响应就可以逐步产生了
这里尽管只指定了一个200头信息,但Node自动将两个头信息Transfer-Encoding和Connection加了进去.
*/
//res.writeHead(200, {'content-Type': 'text/html'});
//这里注明了服务器发送的内容为text/html类型,不然浏览器会默认其为text/plain普通文本类型的
require('http').createServer(function(req, res) {
res.writeHead(200);
res.end('Hello world');
setTimeOut(function() {
res.end('world');
},500);
}).listen(3000));
//发送数据块的方式在设计文件系统的情况下非常高效
//Node允许以数据块的形式往响应中写数据,同时也允许以数据块的形式读取文件,
//从而我们可以利用ReadStream文件系统API来实现!
require('http').createServer(function(req, res) {
res.writeHead(200, { 'Content-Type': 'image/png'});
var stream = require('fs').createReadStream('image.png');
stream.on('data', function(data) {
res.write(data);
});
stream.on('end', function() {
res.end();
};
});
//如果是再每个请求写入前都用fs.readFile将其信息读取完,则在处理大量请求的时候会消耗大量内存的
//将一个流(stream)(文件系统)(piping)到另一个流上(一个http.ServerResponse对象)
//流的对接
//require('fs').createReadStream('image/png').pipe(res);