什么是Node.js
1、Node.js就是运行在服务端的JavaScrip。
2、Node.js是一个基于Chrome JavaScrip运行时简历的一个平台。
3、Node.js是一个非阻塞I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快。
看下官网的介绍:
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.js的使用场景
在看他的使用场景之前先了解下Node js 的优缺点吧
一、Node js特点
1、他是一个JavaScript运行环境
2、依赖于Chrome V8引擎进行代码解析
3、事件驱动非阻塞I/O
4、轻量、可伸缩、适用于实时数据交互应用
5、单进程,单线程
什么是事件驱动?什么是非阻塞I/O可以参考我的文章,这里面详细的介绍了异步IO模型,可以过去他去了解Node js的事件驱动和非阻塞I/O带来的好处。
http://www.cnblogs.com/luotianshuai/p/5098408.html
二、Node js优、缺点
优点:
1、并发高是选择Node js重要的优点
2、适合I/O密集型应用
缺点:
1、不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起。
2、因为是单进程单线程的只能使用一个CPU,不能充分使用CPU导致资源的浪费
3、可靠性低、一呆代码某个环节崩溃,整个系统都将会崩溃
原因:他是单线程、但单进程的
解决方法:
3.1、Nginx反向代理负载均衡开多个进程,绑定多个端口
3.2、开多个进程监听同一个端口,使用cluster模块
4、开源组件库质量参差不齐,更新快,向下不兼容
5、Debug不方便,错误没有stack trace
三、适合Node js的场景
1、Restful API
这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。
2、统一Web应用的UI层
目前MVC的架构,在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。
不讨论这种架构是好是坏,但是有另外一种实践,面向服务的架构,更好的做前后端的依赖分离。如果所有的关键业务逻辑都封装成REST调用,就意味着在上层只需要考虑如何用这些REST接口构建具体的应用。那些后端程序员们根本不操心具体数据是如何从一个页面传递到另一个页面的,他们也不用管用户数据更新是通过Ajax异步获取的还是通过刷新页面。
3、大量的Ajax请求
例如个性化应用,每个用户看到的页面都不一样,缓存失效,需要在页面加载的时候发起Ajax请求,或者弹幕系统大量的用户同时通过评论,NodeJS能响应大量的并发请求。 总而言之,NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。
注:Node js非常不错它可以实现很多应用,当我们要使用它完成某个应用的时候,需要考虑的是适不适合用它来做。
Node js安装配置
1、下载源码 更多版本:https://nodejs.org/en/download/
cd /work/app/ wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz
2、解压源码
tar -zxvf node-v0.10.24.tar.gz
3、编译安装
cd node-v0.10.24 ./configure --prefix=/work/app make make install
4、配置NODE_HOME,进入profile编辑环境变量
vim /etc/profile
设置nodejs环境变量,在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容
export NODE_HOME=/work/app/node/0.10.24 export PATH=$NODE_HOME/bin:$PATH
:wq保存并退出,编译/etc/profile 使配置生效
source /etc/profile
验证是否安装配置成功
node -v
输出 v0.10.24 表示配置成功
npm模块安装路径
/work/app/node/0.10.24/lib/node_modules
MAC 安装Node js
服务器上安装了Node js之后为了快速的开发Node js所以在MAC上安装Node js并使用pycharm进行开发
一、安装Node js
https://nodejs.org/en/download/
下载并安装Node js 它将在你的机器上安装 Node.js 和 npm (node package manager).
二、安装pycharm插件
这两个插件都安装下
然后就可以创建Node js项目了
Node js 第一个应用
如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi。
从这个角度看,整个"接收 HTTP 请求并提供 Web 页面"的需求根本不需 要 PHP 来处理。
不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时,我们不仅仅 在实现一个应用,同时还实现了整个 HTTP 服务器。事实上,我们的 Web 应用以及对应的 Web 服务器基本上是一样的。有点类似我大Django和Tornado
在我们创建 Node.js 第一个 "Hello, World!" 应用前,让我们先了解下 Node.js 应用是由哪几部分组成的:
required 模块:我们可以使用 require 指令来载入 Node.js 模块。
创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。
接收请求与响应请求 :服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。
1、引入Node js模块
使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http:
var http = require('http');
2、创建服务
#!/usr/bin/env node // require的指令来载入node.js模块并通过其创建对象 var http = require('http'); //通过createServer方法并使用listen方法绑定8888端口,通过request,response参数来接收和相应数据 http.createServer(function (request,response) { //发送HTTP部 //HTTP状态值:200 OK //内容类型text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); //发送相应数据"Hello World" response.end('Hello World\n') }).listen(8888); //终端打印内容 //console.log 哈哈~ 用到Server这里终端输出了~所以说呢node js就是运行在服务端的JavaScript console.log('Server running at http://127.0.0.1:8888');
3、执行代码
以上代码我们完成了一个可以工作的 HTTP 服务器。
使用 node 命令执行以上的代码:
LuoTimdeMacBook-Pro-2:bin luotim$ node www.js Server running at http://127.0.0.1:8888
测试: