一、打開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);