Node.js 使用C++开发的。 Node.js是一个事件驱动服务端JavaScript环境,只要能够安装相应的模块包,就可以开发出需要的服务端程序,如HTTP服务端程序、Socket程序等。

Node 有两大特点是:

1. 基于事件驱动

2.无阻塞

所以node非常适合处理并发请求

我们大家都知道node的本质是javaScript,所以基于事件驱动并不难理解,事件驱动简单的讲就是用户点击什么按钮(即产生什么事件)然后电脑执行操作(调用函数)

而我们知道javascript是单线程,那是怎么做到无阻塞的?  答:node通过大量的回调函数来实现无阻塞

编写一个最简单的HTTP服务器程序,客户端通过浏览器请求该服务器,并在浏览器页面中显示Hell World。服务器的app.js文件代码如下:

var http = require('http');
http.createServer(
function (req, res)
{
//发送HTTP头部,HTTP状态码:200:OK,内容类型:text/plain
res.writeHead(200, { 'Content-Type': 'text/plain' });
//发送响应数据“Hello World”
res.end('HelloWorld\n');
}).listen(3000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:3000/'); 

  运行结果如下:

 

Node.js应用是由哪几部分组成的:

1.引入required模块:我们可以使用require指令来载入Node.js模块

2.创建服务器:服务器可以监听客户端的请求,类似Apche、Nginx等HTTP服务器

3.接收请求与响应请求:服务器很容易创建,客户端可以使用浏览器或终端发送HTTP请求,服务器接收请求后返回响应数据。

我们使用require指令来载入http模块,并将实例化的HTTP赋值给变量http,实例如下:

var http=require("http");

接下来我们使用http.createServer()方法创建服务器,并使用listen方法绑定3000端口。函数通过request,response参数来接收和响应数据。

NPM使用介绍:

NPM是随NodeJs一起安装的包管理工具,能解决NodeJs代码部署的很多问题,常见的使用场景有以下几种:

允许用户从NPM服务器下载别人编写的命令包到本地使用。

允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用

允许用户将字节编写的包或命令行程序上床到NPM服务器供被人使用

使用npm命令安装模块

安装好之后,express包就放在了工程目录下的node_modules目录中,因此在代码只需要通过require('express')的方式就好,无需制定第三方包路径

var express=require('express');

  全局安装与本地安装

npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别知识有没有-g 而已,比如

npm install express   #本地安装
npm install express -g #全局安装

  如果出现以下错误:

npm err:Error:connect ECONNREFUSED 127.0.0.1:8087

  解决办法为:

npm config set proxy null

本地安装

1.将安装包放在 ./node_modules下(运行npm命令时所作的目录),如果没有node_modules目录,会在当前执行npm命令的目录下生产node_modules目录。

2.可以通过require()来引入本地安装的包

全局安装

1.将安装在/usr/local下或者你node的安装目录

2.可以直接在命令行里使用

如果你希望具备两者功能,则需要在两个地方安装它或使用npm link

Node.js回调函数

Node.js异步编程的直接体现就是回调。

异步编程依托回调函数来实现,但不能说使用了回调后程序就异步化了。

回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有API都支持回调函数。

例如我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件I/O操作。这就大大提高了Node.js的性能,可以处理大量的并发请求。

回调函数一般作为函数的最后一个参数出现:

阻塞代码实例:

创建一个文件input.txt,内容如下:

who are you ?

创建test.js 文件,代码如下:

var fs=require("fs");
var data=fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序执行结束!");

  运行结果如下:

非阻塞代码实例:

创建一个test.js文件,代码如下:

var fs=require("fs");
fs.readFile('input.txt',function(err,data){
if(err)return console.error(err);
console.log(data.toString());
})
;
console.log("程序执行完毕!");

  运行结果如下:

Node.js是单进程单线程应用程序,但是因为V8引擎提供的异步执行回调函数,通过这些接口可以处理大量的并发,所以性能非常高。

Node.js几乎每一个API都是支持回调函数的。

Node.js基本上所有的事件机制都是设计模式中观察者模式实现。

Node.js单线程类似进入一个while(true)的时间模式,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数。

使用socket.io

Node.js提供了高效的服务器运行环境,但是由于客户端(PC浏览器、移动设备浏览器等)对HTML5的支持不一样,为了兼容所有的浏览器、提供实时的用户体验,Node.js推出了Socket.io技术,官方网站http://socket.io提供了Socket.IO技术的基本介绍

  具体地说,Socket.IO是一个WebSocket库,包括客户端的JavaScript库和服务器端的Node.js模块,它可以构建在不同浏览器和移动设备上使用的实时通信。Socket.IO具有Node.js事件触发机制,能够实现客户端与服务器双向通信。

  Socket.IO服务器端开发

想要开发Socket.IO服务器端程序,需要安装Node.js模块的Socket.IO模块包。在Node.js模块包的管理使用npm指令。安装Socket.IO模块指令如下:

Node.js 入门篇的更多相关文章

  1. Node.js 入门手册:那些最流行的 Web 开发框架

    这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...

  2. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  3. Node.js入门实例程序

    在使用Node.js创建实际“Hello, World!”应用程序之前,让我们看看Node.js的应用程序的部分.Node.js应用程序由以下三个重要组成部分: 导入需要模块: 我们使用require ...

  4. Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  5. 极简 Node.js 入门 - 2.4 定时器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  6. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  7. 让我们一起学习《Node.js入门》一书吧!

    Node.js入门 读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件. 里面对一些知识的讲解,让你略窥Node.js的门径.最好一段代码一段代码的写下来,我的习惯是手里拿 ...

  8. web前端开发分享-css,js入门篇(转)

    转自:http://www.cnblogs.com/jikey/p/3600308.html 关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人 ...

  9. Node.js学习准备篇

    这里写个Node.js 准备篇包含内容有node.js 的安装,命令行运行node.js 文件,使用webStrom 编写 node.js 时有提示功能,并用webStrom 运行 Node.js 其 ...

随机推荐

  1. 剑指offer:按之字形打印二叉树(栈|双向队列+中序遍历)

    1. 题目描述 /** 请实现一个函数按照之字形打印二叉树, 即第一行按照从左到右的顺序打印, 第二层按照从右至左的顺序打印, 第三行按照从左到右的顺序打印, 其他行以此类推. */ 2. 双向队列 ...

  2. [NewLife.XCode]实体工厂(拦截处理实体操作)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和 ...

  3. SQL Server 通过“with as”方法查询树型结构

    一.with as 公用表表达式 类似VIEW,但是不并没有创建对象,WITH  AS 公用表表达式不创建对象,只能被后随的SELECT语句,其作用: 1. 实现递归查询(树形结构) 2. 可以在一个 ...

  4. Spring Cloud Eureka 服务注册中心(二)

    序言 Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件 它主要包括两个组件:Eureka Server 和 Eureka Client Eureka Clie ...

  5. 【mysql】Mysql的profile的使用 --- Profilling mysql的性能分析工具

    分析SQL执行带来的开销是优化SQL的重要手段. 在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析.该参数可以在全局和session级别来设置.对于全局级别则作用于整个MySQ ...

  6. java基于NIO的分散读取文件,然后统一聚合后写入文件

    分散读取:对于一个文件,可以分散的读取数据,可以快速的读取,好比多个线程在分段同时读取: 聚合写入:为了提高效率,一般读取到的数据都是分散的,要快速写入,就需要把分散的数据聚集在一起,然后一块写入到文 ...

  7. 百度编辑器UEditor,保存图片的配置问题

    前言: 在使用百度编辑器UEditor的时候,如何将图片保存到服务器,我刚开始以为是要自己写上传文件的方法,后来发现只需要配置一下即可,如果你也正在使用百度富文本编辑器UEditor的话,这篇文章将非 ...

  8. Linux命令行基本数据库语句

    -- 数据库的操作 -- 链接数据库 mysql -uroot -p mysql -uroot -pmysql -- 退出数据库 exit/quit/ctrl+d -- sql语句最后需要有分号;结尾 ...

  9. PDO封装增删改查

    <?phpclass db{ public $table=null; public $pdo; public $where=null; //where 条件 public $field=null ...

  10. Laravel 创建指定表 migrate

    解决方案:打开创建表的那个 migration 文件,在创建表的方法执行之前加一个判断条件 if (!Schema::hasTable('password_resets')) { Schema::cr ...