让我欲罢不能的node.js

从我大一接触第一门编程语言C开始,到如今工做三年陆续接触到了C、汇编、C++、C#、Java、JavaScript、PHP,还有一些HTML、CSS神马的,历来没有一门语言让我像对node.js同样的着迷。接触nodejs在我以前博客提到过在搞web socket在选择服务器的时候不少人推荐nodejs版的,无奈当时对nodejs没有任何概念,因此没看懂人家写的代码,可是感受很熟悉,网上基本是以在服务器端运行的javascript来解释什么是nodejs,这就让我更疑惑了,javascript怎么可能作socket服务器,在用C#写出服务器后回头看了一下node.js,十分钟以后我就被彻底吸引住了。javascript

补记:因为写博客是对nodejs处于了解语法阶段,不少问题没有说清楚,点反对的人很多,关于一些原理性东西能够看看关于node.js的误会html

什么是node.js

到底什么是node.js呢?看看官网对nodejs的描述:java

Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.node

咱们能够对此总结出几点python

  1. node.js是一个构建在Chrome JavaScript运行环境的平台,这是很重要的一点,node.js并非一门语言,而是一个平台
  2. node.js致力于使构建速度快、稳定的网络程序更简单
  3. node.js具备事件驱动和非阻塞I/O的特点,使之轻量级而且高效率
  4. node.js很是适合在分布式设备运行数据密集型实时应用程序

服务器端运行的JavaScript?

Chrome JavaScript runtime也就是咱们常说的 Chrome的V8 JavaScript Engine,也就是Goole开发的一个用于Chrome浏览器的底层JavaScript引擎,用于解析JavaScript语句建立其运行环境,保证咱们写的语句在浏览器上的表现和咱们预期的一致。git

那么为何说node.js是服务器端运行的JavaScript?好好地nodejs干吗要和V8扯上关系?除了Google搞的V8解释JavaScript十分的快,十分重要的一个缘由是V8 JavaScript 引擎并不只限于在浏览器中运行,能够嵌入任何应用程序中运行。Node.js 和.net framework相似是一个平台(这里有些搞不明白,望大神们指点一二),但它没有像.net同样创造了一门语言——C#在这个平台上运行,而是很巧妙的借用了web开发人员已经很是熟悉的JavaScript语法,使用V8引擎来解析语句,并将其重建可在服务器上使用。因此严格上说node.js并非服务器端运行的Javascript,而是能够在服务器端运行JavaScript语法的平台。 web

为何要用node.js

搞了半天就是一个新瓶装旧酒的东西,看起来除了一个新鲜的可使用JavaScript语法,node.js没什么长处,为何要用它而不是一样能够在服务器端运行的Java或C#呢?这要从node.js事件驱动和非阻塞I/O的特点谈起。关于事件驱动熟悉JavaScript的同窗应该很熟悉了,node.js采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口,好比一个数据库访问,采用事件机制,发起请求以后,当即将进程交出,当数据返回后触发事件,再继续处理数据。ajax

在传统的阻塞I/O中其运行过程是这样的数据库

int num=query('select * from ......');

print(num);

...................//无关语句

print方法必须等待query方法返回结果,若是数据库出现网络链接故障,那么print方法就要等到超时才能执行,而后后面一些无关语句才能一次执行,而在非阻塞I/O中是这样的npm

query('select * from...',callback(data){
  .............//相关语句
  print();
});

..............//无关语句

跟咱们使用ajax,在回调函数中处理结果,可是不影响下面语句执行。 怪不得node.js要借用JavaScript来作此事,JavaScript的几个特性使它很胜任这项工做

  1. 事件机制
  2. 函数式编程,支持匿名函数,函数参数
Node.js中代码是单进程、单线程执行的(咱们写的代码是,但node.js自己不是有兴趣同窗能够看看 这个进一步了解),使用事件轮询机制和非阻塞I/O,在不新增额外线程的状况下对任务进行并行处理 。node.js解决了 阻塞式编程浪费大量进程资源只是在等待,致使的大量内存和cpu的浪费问题,因此才敢宣称本身perfect for数据密集型的实时web 应用程序。

如何安装

nodejs的安装仍是很简单的,尤为是如今安装包都把npm集成了进去,不用单独安装了,下载下安装包运行就能够了,另外想完整使用nodejs的话须要有C语言的编译环境、git和python,使用window的同窗很能会稍微麻烦一些,须要搞定这些。对命令行情有独钟的同窗能够看看How to Install Node.js

npm是什么

npm是node packaged modules的缩写,实际上是一个nodejs的module的管理工具

什么是module

所谓module和java中的包的概念很相似,一些解决方案的集合,官方会提供核心的几个,第三方的不少

如何安装第三方module

由于nodejs的社区很活跃,有不少好用的第三方的包,咱们能够在终端中使用npm的命令安装

  • npm install [-g] <name>:使用install指令能够把nodule下载安装的nodejs的全局的path处,不加的话会安装到当前路径
  • npm remove <name>:移除module
  • npm update <name>:更新 module

还有一些经常使用命令能够看看npm经常使用命令

第一个demo

 这些都搞定后咱们就能够写传说中的hello world了。在任意目录建一个test.js文件

console.log('Hello, World!');

简单的一句话就能够,而后使用node命令运行

 这这这。。。太没技术含量了,看看官方给的demo,使用nodejs建立一个web server有多简单

var http=require('http');//引入http module
  2 http.createServer(function(request,response){//建立一个web server
  3     //回调函数,这样建立server方法就不会阻塞了
  4     response.writeHead(200,{'contentType':'text/plain'});
  5     response.end('Hello World!\n');
  6 }).listen(8124);
  7 console.log('Server running at http://127.0.0.1:8124/');

 先运行一下服务器,按两次Ctrl+C退出

使用浏览器访问一下

就这么简单

如何学习

看到上面的demo是否是也对nodejs产生兴趣了呢,但是像我这样的懒人接触一门新语言的时候不知道该如何下手,难道又要去作个无聊的购物车神马的嘛,学习nodejs不用,nodejs为咱们提供了一个小游戏同样的教程,就像个寻宝过程从零开始,没步都有一个任务和一下提示让你走的更远,上nodeschool下载而后开始寻宝吧,我就是被这小游戏迷住了,顺便秀一下我一天的战绩,每一个任务都完成了

看看解释就知道怎么作了,不过建议最开始run和verify结合使用,verify告诉你执行结果和预期结果,run会告诉你有哪些错误

 固然除了这些小游戏帮咱们熟悉nodejs语法及使用,一些优秀的社区也能够帮咱们不少

CNode

开源中国

常见问题

相关文章
相关标签/搜索