var http = require(“http”);
http.createServer(function(request, response) { response.writeHead(200, {“Content-Type”: “text/plain”}); response.write(“Hello World”); response.end(); }).listen(8888);
上面这段代码写在index.JS 里是不是表示每次有一个用户来访问都会createServer 生成一个http服务器,这样很多人来访问就会有很多服务器产生。但是像appach 就只有一个服务器。node这样只不是很浪费资源。
单线程啊…
要验证这个很简单.你写个 全局count 看一下count,访问一次是不是递增的…
以上代码等价于
var http = require(“http”);
var server = http.createServer();
server.listen(6001);
server.on(‘connection’, function(){
response.writeHead(200, {“Content-Type”: “text/plain”});
response.write(“Hello World”);
response.end();
})
每次有访问过来,只会触发’connection’里面的代码。
createServer()参数如果是function,node会自动监听’connection’。
我的意思是,外部的请求都是针对文件的,比如客户访问了index.JS, 然后文件中var server= http.createServer();就等于实例化了一个sever对象,该对象是注册了事件监听器的,它监听6001 端口的connection事件。那么很多客户来访问index.JS 页面,是不是都会重复实例化sever对象还是公用这个之前生成的对象,可不可以写个代码测试一下
个人感觉楼上几个回复都已经很清楚了…
你想一下,单线程的玩意,你的对象一旦创建,就一直活在内存里面,无论你怎么访问,还是这个对象,这个与apache过来一个访问创建一个线程不同的.
这个也是nodejs 的特性,没有这个特性的话,干嘛要选择node …
要验证很简单.我们只需在http 创建一个属性,如果是重复实例化的count 应该会一直输出 1,共用的话,就会不断递增…
var http = require("http");
http.count = 0;
http.createServer(function(request, response) {
console.log(++http.count);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888);
你自己跑一下这个例子吧…
嗯,谢谢。一定好好学习node
你个的代码怎么会每次+2而不是+1
…你是本机并且用的是ip 访问吧… 例如局域网: 192.168.1.100:8888 这样访问的话就会触发两次…
如果是用localhost:8888 就是一次…
至于为什么…补一下网络基础吧…
+2可能是因为很多浏览器可能会访问一个/favicon.ico的图标 就是地址栏前面显示的那个。
另:createServer是启动应用的时候只调用一次,就是你调用 node index.js的时候调用。
@gaddd 你用的localhost 也是 +2? 看来,我需要补一下网络基础了…
@gaddd 你是对的…看来是我想歪了…简单加一句就可以测试出来了.
console.log(request.url);
var http = require(“http”);
function onRequest(request, response) { response.writeHead(200, {“Content-Type”: “text/plain”}); response.write(“Hello World”); response.end(); } http.createServer(onRequest).listen(8888); console.log(“create a server instance”);
这样子运行一下就知道,每次运行node index.js的时候会输出 create a server instance ,每次浏览器访问不会输出。
@youxiachai 嘿嘿,那个语法高亮是怎么弄的<code></code> <code>console.log(“Hello World”);</code>
@gentlecolder 在nodejs中外部的访问不是针对代码文件的,这不同于apache等服务器。 所有的访问是通过onRequest 然后执行里面的代码实际应用是按pathname和参数做路由。 http://www.nodebeginner.org/index-zh-cn.html 看一遍这个应该就明了了。
写的不错
外部请求不是针对文件的,而是针对端口,node index.js(只执行一次,所以createServer也只会执行一次),会监听端口的请求,如果有请求进来,node会使用你传递给createServer的这个function处理这个请求,在这个函数中实现如何响应这个请求。
呵呵你问的这个问题够奇葩的,用户就是访问文件index.JS也不是直接执行js代码吧,也是要通过http服务器来访问的吧,也要通过http.createServer来访问吧,这个可不是浏览器端src="index.js"就加载一次了,服务器的任何文件都是http服务来进行的,说了这么多应该明白了吧
@youxiachai 什么情况啊,我试了一下,都是每次增加1的。。。