Page 78 - Node.js开发指南
P. 78
70 第 4 章 Node.js 核心模块
4.5 HTTP 服务器与客户端
Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的
HTTP 客户端。 http.Server 是一个基于事件的 HTTP 服务器,它的核心由 Node.js 下层 C++
部分实现,而接口由 JavaScript 封装,兼顾了高性能与简易性。http.request 则是一个
①
HTTP 客户端工具,用于向 HTTP 服务器发起请求,例如实现 Pingback 或者内容抓取。
4.5.1 HTTP 服务器
http.Server 是 http 模块中的 HTTP 服务器对象,用 Node.js 做的所有基于 HTTP 协
议的系统,如网站、社交应用甚至代理服务器,都是基于 http.Server 实现的。它提供了
一套封装级别很低的 API,仅仅是流控制和简单的消息解析,所有的高层功能都要通过它的
接口来实现。
我们在 3.1.3 节中使用 http 实现了一个服务器:
//app.js
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello World</p>');
}).listen(3000);
console.log("HTTP server is listening at port 3000.");
这段代码中,http.createServer 创建了一个 http.Server 的实例,将一个函数
作为 HTTP 请求处理函数。这个函数接受两个参数,分别是请求对象( req )和响应对象
( res )。在函数体内,res 显式地写回了响应代码 200 (表示请求成功),指定响应头为
'Content-Type': 'text/html',然后写入响应体 '<h1>Node.js</h1>',通过 res.end
结束并发送。最后该实例还调用了 listen 函数,启动服务器并监听 3000 端口。
1. http.Server 的事件
http.Server 是一个基于事件的 HTTP 服务器,所有的请求都被封装为独立的事件,
开发者只需要对它的事件编写响应函数即可实现 HTTP 服务器的所有功能。它继承自
EventEmitter,提供了以下几个事件。
——————————
① Pingback 是博客系统中用来通知文章被他人引用的一种手段,例如 WordPress 会自动解析文章中的链接,发送
Pingback 以告知链接被引用。