因组里项目须要,我和另一名同事要学习Node.js。以前接触过Javascript,都是前台处理html时用到,如今要用Javascript作后端,学习Node.js,用一段时间专心学习一门新技术,并且还有项目实战锻炼,还不错。html
一. Node.js架构node
1. Node.js跨平台支持*nix与Windows得益于Libuv中间层,经过它去调用不一样操做系统的底层操做。编程
2. Node.js底层由C++实现,所以能够编写C++扩展模块,经封装后由JS调用,这样能够解决须要提高性能时(例如频繁的位运算,JavaScript的一个弱点是位运算,由JS来作性能低),就能够编写C++扩展模块,与JS配合提高性能。后端
二. Node.js特色安全
1. 单线程服务器
优势:无需像多线程编程在乎状态的同步问题,所以无死锁问题,也避免了线程上下文切换带来的性能开销网络
2. 异步I/0(非阻塞I/0)多线程
优势:让单线程远离阻塞,更好地利用CPU架构
3. 事件驱动异步
三. 初学网络编程
Node.js标准库提供了http模块,其中封装了一个高效的HTTP服务器和一个简易的HTTP客户端。http.server是一个基于事件的HTTP服务器,核心由Node.js下层C++部分实现,接口由Javascript封装,兼顾高性能与简易性。
举个经典的小例子,
1 //http.js 2 var http = require('http'); 3 var url = require('url'); 4 var querystring = require('querystring'); 5 6 //for example, url: http://127.0.0.1:3000/p/a/t/h?query=string 7 8 var getReqInfo = function(req){ 9 //get req.url 10 console.log("req.url: " + req.url); 11 12 //get path 13 var path = (url.parse(req.url)).pathname; 14 console.log("path: " + path); 15 16 //get querystring 17 var query = url.parse(req.url).query; 18 console.log(querystring.parse(query)); 19 } 20 21 http.createServer(function(req, res){ 22 23 getReqInfo(req); 24 25 res.writeHead(200, {'Content-Type': 'text/plain'}); 26 res.end('Hello world!\n'); 27 }).listen(3000); 28 29 console.log('now we are listening 3000 port');
用户经过输入URL(http://127.0.0.1:3000/p/a/t/h?query=string)访问时,就能够获取URL中的参数(这里指reqest header的第一行信息),并做出响应。结果以下:
这里建立的是HTTP服务器,若是建立Https服务器,相比http,须要多提供一个参数,包含私钥和签名证书,如server.key和server.crt。客户端在发起安全链接前会去获取服务器端的证书,并经过CA的证书验证服务器端证书的真伪。
四. Node.js学习资料
1. 《Node.js入门指南》,推荐,适合入门
2. 《深刻简出Node.js》,有深度,推荐
五. 其余备忘
1. IDE
我用的是Vim,安装插件(nodejscomplete和JsHint)后,能够实现代码提示及语法错误检查。
2014.6.4上午