2012-12-13 39 views

回答

16

基於的NodeJS(下面提取)的源代碼,createServer僅僅是一個輔助方法來實例化一個Server

line 1674 of http.js中提取。

exports.Server = Server; 


exports.createServer = function(requestListener) { 
    return new Server(requestListener); 
}; 

所以因此,你在你原來的問題提到的兩個代碼片段,唯一真正不同的是,你不使用new關鍵字。


爲了清楚起見,Server構造如下(以發帖時間 - 2012年12月13日):

function Server(requestListener) { 
    if (!(this instanceof Server)) return new Server(requestListener); 
    net.Server.call(this, { allowHalfOpen: true }); 

    if (requestListener) { 
    this.addListener('request', requestListener); 
    } 

    // Similar option to this. Too lazy to write my own docs. 
    // http://www.squid-cache.org/Doc/config/half_closed_clients/ 
    // http://wiki.squid-cache.org/SquidFaq/InnerWorkings#What_is_a_half-closed_filedescriptor.3F 
    this.httpAllowHalfOpen = false; 

    this.addListener('connection', connectionListener); 

    this.addListener('clientError', function(err, conn) { 
    conn.destroy(err); 
    }); 
} 
util.inherits(Server, net.Server); 
+0

謝謝,我想盡可能多。爲了可讀性,你可以在你的代碼示例中添加'Server'構造函數嗎? – wulfgarpro

+0

@ wulfgar.pro沒問題,現在補充 – isNaN1247

3

根據the docs,這似乎是

http.createServer = function (requestListener) { 
    var ser = new http.Server(); 
    ser.addListener(requestListener); 
    return ser; 
};