【Node.js】初识Node.js

  因组里项目需要,我和另外一名同事要学习Node.js。之前接触过Javascript,都是前台处理html时用到,现在要用Javascript做后端,学习Node.js,用一段时间专心学习一门新技术,而且还有项目实战锻炼,还不错。

一.  Node.js架构

  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.keyserver.crt。客户端在发起安全连接前会去获取服务器端的证书,并通过CA的证书验证服务器端证书的真伪。

四. Node.js学习资料

  1. 《Node.js入门指南》,推荐,适合入门

  2. 《深入简出Node.js》,有深度,推荐

五. 其他备忘

  1. IDE

    我用的是Vim,安装插件(nodejscomplete和JsHint)后,可以实现代码提示及语法错误检查。

                                                              2014.6.4上午

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

Netty和Tomcat的区别、性能对比

Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编...

1003
来自专栏开源优测

一篇文章入门API测试

API是Application Programming Interface的简写。

862
来自专栏Java技术分享

如何用redis/memcache做Mysql缓存层?

目前公司的一个项目,数据库用的是Mysql,正在考虑用redis/memcached做数据库的缓存层,目前的想法就是在读DB前,先读缓存层,如果有直接返回,如果...

2759
来自专栏子勰随笔

基于mdwiki使用Markdown实现的wiki

1985
来自专栏开源优测

一篇文章入门API测试

API是Application Programming Interface的简写。

1023
来自专栏快乐八哥

Angular企业级开发(5)-项目框架搭建

1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目...

1966
来自专栏腾讯云容器服务团队的专栏

8 月最新基于 kubernetes 的应用编排实践

本文讲述关于应用编排的实践话题,在腾讯云容器服务应用编排的实践部分,主要会涉及配置管理,应用模板管理,基于应用的服务组管理等内容。

1.1K1
来自专栏开源优测

一篇文章让你入门API测试

什么是API API是Application Programming Interface的简写。 实现了两个或多个独立系统或模块间的通信和数据交换能力。 什么是...

35410
来自专栏开源优测

一篇文章让你入门API测试

什么是API API是Application Programming Interface的简写。 实现了两个或多个独立系统或模块间的通信和数据交换能力。 什么是...

2474
来自专栏架构师之路

服务挂了,怎么自动恢复?

1514

扫码关注云+社区