第一节:Node.js简介
1.什么是Node.js?
Node.js是一个用于开发各种Web服务器的开发工具,在Node.js服务器中,运行的高性能V8 JavaScript脚本语言,该语言是一种可以运行仔服务器端的JavaScript脚本语言。它为了提高性能,采用了以下两种机制:非阻塞型I/O和事件环,由于采用了非阻塞型I/O,所以在执行了访问数据库的代码后将立即转而执行其后的代码,把数据库返回结果的处理代码放在回掉函数中执行,从而提高了程序的执行效率,在Node.js中,在一个时刻只能执行一个事件回掉函数,但是在执行一个事件回掉函数的中途可以转而处理其他事件(包括新事件的触发、声明、回掉),然后返回继续执行原事件回掉函数,这种处理机制称为事件环机制。
2.为什么需要Node.js?
在Java、PHP、ASP.NET等服务器端语言中,为每一个客户端连接创建一个新的线程,每个线程需要消耗大约2MB的内存,例如8GB内存的服务器可以同时连接的最大用户数为4000个左右,如果要让web程序支持更多的用户,就需要增加服务器的数量,那么硬件成本也会随之增加,不仅如此,在技术上也会潜在一些问题。所以在一个web应用程序中,一个主要的瓶颈是服务器所支持的最大同时连接用户量。而Node.js正好解决了这个问题,它修改了客户端到服务器的连接方式,它并不是为每个客户端连接创建一个新的线程,而是为每个客户端连接触发一个Node.js内部进行处理的事件。
所以说当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要非常复杂的处理的时候,可以选择Node.js,比如,聊天服务器、综合服务类网站或电子商务网站的服务器等一些在同一时刻接收到多达上千条数据并且需要存入数据库中,Node.js通过队列机制将这些数据迅速书写在缓存区中。
3.怎样使用Node.js?这是我们接下来要用一段时间来研究的问题
Node.js官网地址为http://nodejs.org,下载Nodejs。
接下来我们来了解下Node.js中的模块:
学过前端的同学都知道在客户端可以将所有的JavaScript代码分割为几个JS文件,然后在浏览器中将这些JS文件合并运行。但是在javaScript中是通过模块为单位来划分所有功能的。每一个模块为一个JS文件,每一个模块中定义的全局变量或函数的作用范围都会被限定在这个模块中,只有使用exports对象才能将其传递到外部。如:exports.printHi=function(){return "hi"} 那怎么在另一个js文件中访问呢? 可以参考以下代码: var hi=require('./Hi.js'); //加载Hi.js模块
console.log(hi.printHi()); //访问Hi.js模块内的函数printHi
常用的核心模块有:assert 为应用程序的单元测试添加断言处理
buffer 用于实现二进制数据的存储与转换
debugger 用于实现一个内置调试器来帮助开发者调试应用程序
dns 用于现实与DNS相关的处理
events 用于为时间处理提供的一个基础类
fs 用于操作文件及文件系统
http 用于实现HTTP服务器及客户端
https 用于实现HTTPS服务器及客户端
net 创建TCP服务器和客户端
os 获取操作系统信息
path 处理文件路径
querystring 处理HTTP请求中使用的查询字符串
util 实现各种实用函数
zlib 内部使用zlib类库来实现数据的压缩及解压处理
url 实现URL字符串的解析与格式化
string_decoder 用于实现从二进制数据到字符串数据之间的转换
在Node.js中可以直接使用require函数并将模块名设置为require函数的参数值的方法来引用这些模块,例如:var http=require('http');
写出第一个demo:
1编写一个txt文件,最后改后缀为.js,例如命名为Hi.js
var http=require('http');
http.createServer(function (req,res){
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<head><meat charset="utf-8"/></head>');
res.end('你好
');
}).listen(1313,"127.0.0.1");
console.log('Server running at http://127.0.0.1:1313/');
2在cmd使用命名行运行文件
3在浏览器中打开http://127.0.0.1:1313/
注意:把文件的编码格式、内容的编码格式和代码中设置的编码格式一定要一致;