Javascript Node.js';http.Server和http.createServer,什么';有什么区别?
以下两者之间的区别是什么: 服务器(函数(req,res){}) 及 createServer(函数(req,res){}) 据报道,似乎是这样Javascript Node.js';http.Server和http.createServer,什么';有什么区别?,javascript,node.js,Javascript,Node.js,以下两者之间的区别是什么: 服务器(函数(req,res){}) 及 createServer(函数(req,res){}) 据报道,似乎是这样 http.createServer = function (requestListener) { var ser = new http.Server(); ser.addListener(requestListener); return ser; }; 基于nodejs的源代码(摘录如下),createServer只是实
http.createServer = function (requestListener) {
var ser = new http.Server();
ser.addListener(requestListener);
return ser;
};
基于nodejs的源代码(摘录如下),
createServer
只是实例化服务器的一个助手方法
从……中提取
因此,您在原始问题中提到的两个代码片段的唯一真正区别在于,您没有使用new
关键字
为清楚起见,服务器
构造如下(2012年12月13日之后):
谢谢,我也这么想。为了便于阅读,您能否将Server
构造函数添加到您的代码示例中?@wulfgar.pro没问题,现在添加,这意味着,使用createServer
,我们可以创建多个服务器。您能指出这一点吗?你的链接就是整个页面,任何指向你所指段落的链接?@DmitriZaitsev更新。我指的是“返回http.Server的新实例。
请求侦听器
是一个自动添加到'request'
事件中的函数。”(或者多年前的任何文本-看起来addListener
不再存在)谢谢,实际上,它指向了更简单的源代码:@DmitriZaitsev我很确定它在2012年不是那么简单,Server
changedOh的签名,还没有意识到你的答案有那么旧。但是,由于它链接到当前的Node.js版本,是否可以更新代码以反映它?
exports.Server = Server;
exports.createServer = function(requestListener) {
return new Server(requestListener);
};
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);