1.Node.js能够解决什么问题?
Node.js不为每个客户端连接创建一个新的线程,而是为每个客户端连接触发一个在Node.js内部进行处理的事件。因此,能够解决高并发访问的效率问题。
【析】在Java/PHP等服务器端语言中,为每个客户端请求创建一个线程,每个线程耗费月2M,8G内存最大并发4000个,而Node.js可同时处理多达几万个客户端的连接。因此,当需要使用Web应用程序能够支持大量用户的并发连接的时候,应该考虑使用Node.js。
2.使Node.js具备高性能的两种机制:非阻塞型I/O和事件环。
非阻塞型I/O:传统单线程访问数据库时整个线程停下来等待结果返回,而Node.js执行了访问数据库的代码后立即转而执行后面的代码,把返回结果的处理代码放在回调函数中执行,从而提高了程序执行效率。
事件环:一个时刻只能执行一个事件回调函数,但在中途可以转而处理其他事件,包括出发新事件,生命该事件的回调函数等,然后返回继续执行原事件的回调函数。
3.Node.js适合开发的应用程序:
聊天服务器:高并发连接,低复杂处理;
综合服务类网站或电商网站:每秒接收大量数据并将其写入缓存区,再通过单独处理从缓存区取出并写入数据库。
4.Node.js中的模块:
Node.js中以模块为单位进行功能划分,每个模块一个js文件。每个模块中定义的全局变量或函数的作用范围也被限定在这个模块之内,只有使用exports对象才能将其传递到外部。
exports.printFoo = function{
return "Foo";
};
var foo = require('./foo.js');
foo.printFoo(); //调用模块中方法
【理解】exports类似于Java中的关键字public,在定义变量或函数的时候,只有通过它修饰,才能被外部调用。
Node.js中部分核心模块
assert | 单元测试断言处理 |
buffer | 用于二进制数据的处理与转换 |
console | 用于控制台输出信息 |
fs | 用于操作文件及文件系统 |
http | 用于实现http服务器及客户端 |
https | 用于创建https服务器及客户端 |
net | 用于创建TCP服务器及客户端 |
os | 用于获取操作系统信息 |
path | 用于处理文件路径 |
readLine | 用于读取一行标准输入流 |
url | 用于实现url字符串的解析与格式化 |
util | 用于实现各种实用函数 |
zlib | 内部实用zlib类库来实现数据的压缩及解压处理 |
可直接使用的类、对象、函数
Buffer类 | 用于为二进制数据的存储提供缓存区 |
setTimeOut() | 用于在指定时间到达时执行指定函数(毫秒) |
clearTimeOut() | 取消setTimeOut()执行 |
setInterval() | 每个多少毫秒执行一次指定函数 |
clearInterval() | 取消setInterval()执行 |
require() | 用于加载模块 |
module对象 | 用于访问模块信息 |
process对象 | 用于访问进程信息 |
【注】还可以安装第三方模块进行功能扩展,如模板引擎、数据库访问等。
5.一个简单的示例应用程序:
var http = require('http'); //通过require获取 http对象
http.createServer(function(req,res){ //调用http对象的crateServer方法创建服务器,并定义回调函数
res.writeHead(200,{'Content-Type':'text/html'}); //通过res.writeHead方法设置响应头
res.write('<head><meta charset-"utf-8" /></head>'); //通过write方法书写一行html代码
res.end('你好\n'); //res.end方法输出一行代码并结束响应流
}).listen(1337,"127.0.0.1"); //调用服务器对象的listen方法指定该服务器的端口和IP地址
console.log('Server running at http://127.0.0.1:1337/'); //向控制台输出字符串信息