http模塊源碼: https://github.com/nodejs/nod...html
function createServer(opts, requestListener) { return new Server(opts, requestListener); } function request(url, options, cb) { return new ClientRequest(url, options, cb); } function get(url, options, cb) { var req = request(url, options, cb); req.end(); return req; }
咱們不難發現,http 模塊提供三個主要的函數: http.request, http.get, http.createServer。前兩個函數主要是爲了建立 http 客戶端,向其它服務器發送請求,http.get 只是 http.request 的發送 get 請求的便捷方式;而 http.createServer 是爲了建立 Node 服務,好比 Koa 服務框架就是基於 http.createServer 封裝的。node
http.Agent
主要是爲 http.request, http.get 提供代理服務的,用於管理 http 鏈接的建立,銷燬及複用工做。http.request, http.get 默認使用 http.globalAgent 做爲代理,每次請求都是「創建鏈接-數據傳輸-銷燬鏈接」的過程,git
Object.defineProperty(module.exports, 'globalAgent', { configurable: true, enumerable: true, get() { return httpAgent.globalAgent;// 默認使用 http.globalAgent 做爲代理 }, set(value) { httpAgent.globalAgent = value; // 若是咱們想讓多個請求複用同一個 connection,則須要從新定義 agent 去覆蓋默認的 http.globalAgent } });
若是咱們想讓多個請求複用同一個 connection,則須要從新定義 agent 去覆蓋默認的 http.globalAgent,下面咱們看一下新建一個agent的須要哪些主要參數:github
let http = require('http'); const keepAliveAgent = new http.Agent({ keepAlive: true, maxScokets: 1000, maxFreeSockets: 50 }) http.get({ hostname: 'localhost', port: 80, path: '/', agent: keepAliveAgent }, (res) => { // Do stuff with response });
只有向相同的 host 和 port 發送請求才能公用同一個 keepAlive 的 socket 鏈接,若是開啓 keepAlive ,同一時間內多個請求會被放在隊列裏等待;若是當前隊列爲空,該 socket 處於空閒狀態,可是不會被銷燬,等待下一次請求的到來。segmentfault
使用 keepAlive 代理,有效的減小了創建/銷燬鏈接的開銷,開發者能夠對鏈接池進行動態管理。api
大致差很少就是這個意思,詳細能夠看Node.js 官方文檔服務器
https://nodejs.org/docs/lates...
http://nodejs.cn/api/http.htm...
以上圖片來自:https://segmentfault.com/a/11...
https://segmentfault.com/a/11...框架