什么是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

测试:

Node.js之路【第一篇】初识Node.js的更多相关文章

  1. 深入理解javascript对象系列第一篇——初识对象

    × 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...

  2. .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统

    .NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言     相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...

  3. Node.js学习(第一章:Node.js安装和模块化理解)

    Node.js安装和简单使用 安装方法 简单的安装方式是直接官网下载,然后本地安装即可.官网地址:nodejs.org Windows系统下,选择和系统版本匹配的.msi后缀的安装文件.Mac OS ...

  4. 前端(Node.js)(1)-- 初识Node.js

    1.认识 Node.js 诞生.发展.应用现状.生态圈等方面 1.1. 2008年 RyanDahl的目标是创建一个易扩展.适用于现代Web应用通信的服务器平台 1.2.国内外的应用情况 Linked ...

  5. 我们一起学习WCF 第一篇初识WCF(附源码供对照学习)

    前言:去年由于工作需要我学习了wcf的相关知识,初期对wcf的作用以及为何用怎么样都是一知半解,也许现在也不是非常的清晰.但是通过项目对wcf的运用在脑海里面也算有了初步的模型.今天我就把我从开始wc ...

  6. go [第一篇]初识

    [第一篇] 简介 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发 ...

  7. 数据分析之路 第一篇 numpy

    第一篇 numpy 1.N维数组对象 :ndarray在Python中既然有了列表类型,为啥还要整个数组对象(类型)?那是因为:1.数组对象可以除去元素间运算所需要的循环,使得一维向量更像单个数据2. ...

  8. Angular JS 基础应用--第一篇

      前  言          Android应用开发中,有一些功能虽然能够使用原生JS来实现,但是会比较的复杂,因此一些相应的框架应运而生了.框架相对于原生JS而言,从主观上来说,最大的改变就是代码 ...

  9. io.js入门(一)—— 初识io.js

    io.js可以说是彻底从NodeJS里分离出来的一条分支,其事情始末可以查看这篇报道,此处便也不赘言.既然是分支,io.js便也基本兼容NodeJS的各种API,连执行指令也依旧兼容Node的 nod ...

  10. Vue.js高效前端开发 • 【初识Vue.js】

    全部章节 >>>> 文章目录 一.Vue概述 1.Web前端框架介绍 2.MVC和MVVM 3.Vue介绍 4.安装Vue 二.Vue使用 1.第一个Vue应用 2.Vue的双 ...

随机推荐

  1. text-overflow

    text-overflow:clip | ellipsis 默认值:clip 适用于:所有元素 clip: 当对象内文本溢出时不显示省略标记(...),而是将溢出的部分裁切掉. ellipsis: 当 ...

  2. PHP对象Object的概念

    类提供了一个基础,可以在此基础上创建实体(即这个类所建模的实体)的特定实例,这些特定实例称为对象(object) 例如,员工管理应用程序可能包括一个EmPloyee 类.然后可以用这个类来创建和维护特 ...

  3. java中数据类型的转换

    数据类型的转换,分为自动转换和强制转换. 自动转换是程序执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换 强制转换必须在代码中声明,转换顺序不受限制 自动数据类 ...

  4. ERROR: Unable to globalize '/usr/local/NONE/etc/php-fpm.d/*.conf' 问题的解决

    今天继续作大死,趟php7的配置的坑. 照例,安装了昨天的各种扩展之后,解压php7的压缩文件到 /usr/local/. 然后开始配置config的扩展: ./configure --prefix= ...

  5. linux定时任务crond export变量问题

    linux定时任务crond export变量问题 1)我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器,于是就在 crontab里配置了如下内容: 50 17 ...

  6. request.getContextPath()报错

    别人的项目,刚用MyEclipse加载进来,一大堆错误(见怪不怪了) JSP报错,上图: 报错:“The method getContextPath() from the type HttpServl ...

  7. .NET中集合已修改;可能无法执行枚举操作 的解决办法

    foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等).要避免这个问题,就应该使用for循环. https://msdn.microsoft.com/zh-cn/library/tt ...

  8. Android 更改 Toast 的默认位置

    Android中Toast的默认位置在屏幕靠近底部的位置,这个默认位置有时候并不合适.比如页面上内容较少时,内容一般集中在屏幕上半部分,用户的注意力也集中在屏幕上半部分,默认位置的Toast用户可能没 ...

  9. canvas arcTo()用法详解

    CanvasRenderingContext2D对象的方法arcTo()的用法. arcTo(x1, y1, x2, y2, radius) arcTo()方法将利用当前端点.端点1(x1,y1)和端 ...

  10. 用js实现动画效果核心方式

    为了做好导航菜单,有时候需要在菜单下拉的时候实现动画效果,所以这几天就研究了研究如何用js实现动画效果,实现动画核心要用到两个函数,一个是setTimeOut,另一个是setInterval. 下边我 ...