Nodejs是什么?
nodejs是javascript的一个框架,应用于服务器,什么?javascript可以应用在服务端了,不是只能作为前端的吗?是的,javascript终于不仅仅只作为前端开发工具了,同时也可以写后台了,这样之前的前端开发人员可以直接接触服务端的业务逻辑了,而且nodejs的效率一点都不比其他的服务器语言差。
百度一下nodejs,得到的结果:
我了解的nodejs主要是用于提供高性能服务器以及在服务器中运行各种程序的工具。
目前主流的服务器端语言应该为:Java,.Net,PHP,它们为每一个客户端连接创建一个新的线程,每个线程是会耗服务器资源的。Nodejs改变了客户端到服务端的连接方法,它并不为每个客户端连接创建一个新的线程,而是为每个客户端连接触发一个nodejs内部进行处理的事件。所以,用nodejs可以同时处理非常多的款护短连接,非常适合大量用户的并发连接的应用。
首先了解下nodejs的高性能主要是采用了以下两种机制:
- 非堵塞型I/O
- 事件环
非堵塞型I/O
要了解非堵塞型i/o,先要知道普通的堵塞型i/o是什么样的。
场景:访问数据库取得查询结果的时候,中间会存在一个处理时间。在之前的处理机制中,在执行了访问数据库的代码之后,中间的这个处理时间,整个线程会停下来,等处理完成后,才能继续执行其后面的代码。这也就是i/o操作堵塞了代码的执行,因此降低了效率。
nodejs采用的是非堵塞型i/o机制,在执行了访问数据库的代码后就会执行其后面的代码,把数据库返回结果的处理代码放在回调函数中执行,提高了程序的效率。
事件环
nodejs中,在一个时刻只能执行一个事件回调函数,但是在执行一个事件回调函数的中途可以转而处理其他事件,然后返回继续执行原事件回调函数,这种处理机制称为事件环机制。
安装nodejs
nodejs官网:http://www.nodejs.org
在官网下载对应操作系统的安装文件或源码,安装或编译执行。
nodejs中的模块
assert | 为应用程序的单元测试添加断言处理 |
buffer | 用于实现二进制数据的存储与转换 |
child_process | 用于实现子进程的创建与管理 |
cluster | 用于实现多进程 |
console | 用于为控制台输出信息 |
crypto | 用于实现数据的加密解密处理 |
debugger | 用于实现一个内置调试器来帮助开发者调试程序 |
dns | 用于实现与dns相关的处理 |
domain | 用于实现多个i/o之间的协作处理 |
events | 用于为事件处理提供一个基础类 |
fs | 用于操作文件及文件系统 |
http | 用于实现http服务器端及客户端 |
https | 用于实现https服务器端及客户端 |
net | 用于创建tcp服务器与客户端 |
os | 用于获取操作系统信息 |
path | 用户处理文件路径 |
punycode | 用于处理punycode字符串的编码及解码 |
querystring | 用于处理http请求中使用的查询字符串 |
readline | 用于读取一行标准输入流 |
repl | 用于实现repl交互式运行环境 |
stream | 用于为流的输入/输出处理提供一个基础类 |
string_decoder | 用于实现从二进制数据到字符串数据之间的转换 |
tls | 用于实现openssl来实现tls/ssl通信处理 |
tty | 用于获取来自于tty总端的信息 |
url | 用于实现url字符串的解析与格式化 |
util | 用于实现各种实用函数 |
vm | 用于为javascript脚本代码提供一个独立的运行环境 |
zlib | 内部使用zlib类库来实现数据的压缩及解压处理 |
nodejs如何加载模块以及调用模块的方法属性
原生模块的调用
var httpModule = require('http'); //require http模块
文件模块调用方法
var test = require('/path/test.js'); //也可 require('/path/test')
在文件模块中,只有exports和module.exports对象暴露给外部的属性和方法,才能通过require对象进行调用,其他的属性和方法无法获取的。module.exports包含exports。
例如:
test.js
/**
* Created by wanq on 14/11/13.
*/
/**
* exports test code
*/
exports.name = "testname";
exports.test = function () {
console.log("test");
};
var yourname = "tester";
function yourTest() {
console.log("your do test");
}
app.js
/**
* Created by wanq on 14/11/13.
*/
var test = require('./test.js');
console.log(test);
结果:
一个简单的demo
example.js
/**
* Created by wanq on 14/11/13.
*/
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<head><meta charset="utf-8"/></head>');
res.end('您好\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
我们认识了什么nodejs,并且会用nodejs写个小例子。