一、打开gitthub搜索node选择官方仓库javascript
二、点击进去在页面中按字母 T,进入搜索,搜索httpjava
三、选择v1.02版本,查看源码node
exports.IncomingMessage = require('_http_incoming').IncomingMessage; exports.OutgoingMessage = require('_http_outgoing').OutgoingMessage;
提供输入输出流对象。git
exports.createServer = function(requestListener) { return new Server(requestListener); };
返回一个实例对象 Server函数
var server = require('_http_server'); exports.ServerResponse = server.ServerResponse; exports.STATUS_CODES = server.STATUS_CODES;
发现是require了一个私有模块,_http_server,按T进入搜索 _http_server.js,,文件中的函数ui
function Server(requestListener) { if (!(this instanceof Server)) return new Server(requestListener); net.Server.call(this, { allowHalfOpen: true }); if (requestListener) { //若是有回调方法 this.addListener('request', requestListener); //增长事件监听 }
但request是什么时候触发的呢。经过下面的函数 emit(),这个函数包括在function parserOnIncoming(req, shouldKeepAlive)中this
self.emit('request', req, res); var res = new ServerResponse(req);