《Node.js 高级编程》简介与第二章笔记
《Node.js 高级编程》
作者简介
- Pedro Teixerra 高产,开源项目程序员
- Node 社区活跃成员,Node公司的创始人之一.
- 10岁开始编程,Visual Basic、C、C++、Java、PHP、Ruby、Javascript
- 构建模块Fugue、Alfred.js、Carrier、Nock
前言
- 大学期间,构建了多线程TCP服务器
- 事实证明,让同步精细化(最大化资源和时间)和正确化(避免死锁),比较难处理。
- 从事UNIX和关注Java,然后落到PHP和Ruby。才到JavaScipt
- 2010开始接触Node.js
- 高性能,可伸缩,易用性,吸引了作者。
读者对象
- 熟练js或服务器编程
- http,tcp
组织结构
- 模块,缓冲区,事件发射器以及定时器
- 文件,网络
- 测试模块,调试,异步回调
- web应用
- 源码:www.wrox.com/remtitle.cgi?isbn=P010093766
- 讨论,p2p.wrox.com
目录
- 安装Node
- Node 简介
- 加载模块
- 应用缓冲区处理、编码和解码
- 使用事件驱动发射器模式简化事件
- 使用定时器制定函数执行计划
- 查询和读写文件
- 创建和控制外部进程
- 读写数据流
- 构建TCP服务器
- 构建HTTP服务器
- 构建TCP客户端
- 创建HTTP请求
- 使用用户数据报?
- 使用TLS/SSL保证服务器的安全
- 用HTTPS保证HTTP服务器的安全
- 测试模块及其应用程序
- 调试模块
- 控制回调流程
- 构建使用HTTP中间件
- 用Express.js创建Web应用程序
- 使用Socket.IO创建通用的实时Web应用
- 使用node-mysql
- 使用Nano连接CouchDB
- 使用Mongoose
第一章,安装内容(略过)
第二章 Node 简介
本章提要
- 什么是事件驱动编程风格?使用这种风格有什么优点?
- Node.js和JavaScript如何简化了事件驱动编程?
痛点
- 单用户,单进程
- 不具备好的伸缩性
- 管理众多进程在内存和上下文切换代价沉重。
- 较好方案,多线程编程模型
- 轻量级。
- 程序员并不知道,哪些进程在执行。
- 线程锁,信号量。(会有随机发生的危险错误)
- 协同多线程
- 显式让CPU为其他线程分配
- 基于普通多线程,也容易出错
2.1 事件驱动编程风格介绍
定义
程序执行流程取决于事件的编程风格,事件由事件处理程序或者事件回调函数进行处理。
query_finished = function (result){
do_something_with (result);
}
query('select * from posts where id = 1 ',query_finished);
这种I/O操作时,不会发生阻塞。
功能
- 事件监测
- 事件触发
特点
- 在任一给定时刻,最多运行一个事件处理程序
- 事件处理程序可以不间断地运行直到结束
- 节省内存+节省执行时间
2.2 Node 和 JavaScript 如何简化异步应用程序的编写
Node作者,Ryan Dahl构建C语言平台,复杂。转Lua,阻塞与非阻塞在一起就混乱。
转向JavaScript,具有闭包+第一类函数,适合事件驱动。
2.2.1 什么是闭包
就函数,但是它可以继承并访问它自身被声明的那个作用域的变量。
回调函数【核心】
记住了所在上下文,并且可以访问上下文的所有变量。
全局存储变量,不是好做法。(需要闭包,避免污染)
(function(){
var clickCount = 0;
$('button#mybutton').click(function(){
clickCount+=;
alert('Clicked ' + clickCount + ' times.');
});
})
2.2.2 闭包如何辅助异步编程
好处
- 可以通过将状态变量传递给函数不必维护它就能进行事件驱动
- 闭包会为你维护状态变量
总结
- 事件驱动
- JavaScript,有第一类函数和闭包
《Node.js 高级编程》简介与第二章笔记的更多相关文章
- Node.js高级编程读书笔记Outline
Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...
- Node.js高级编程读书笔记 - 1 基本概念
Outline 1 概述和安装 1.1 安装Node 1.2 Node简介 2 Node核心API基础 2.1 加载模块 2.2 应用缓冲区处理.编码和解码二进制数据 2.3 使用时间发射器模式简化事 ...
- Node.js高级编程读书笔记 - 6 应用程序构建和调试 - Never
Explanation 现阶段console.log(...),util.inspect(...), JSON.stringify(...)在控制台输出已经够用了[2015/07/19]. 单元测试隶 ...
- Node.js高级编程读书笔记 - 4 构建Web应用程序
Outline 5 构建Web应用程序 5.1 构建和使用HTTP中间件 5.2 用Express.js创建Web应用程序 5.3 使用Socket.IO创建通用的实时Web应用程序 5 构建Web应 ...
- 《Node.js高级编程》之Node 核心API基础
Node 核心API基础 第三章 加载模块 第四章 应用缓冲区 第五章 事件发射器模式简化事件绑定 第六章 使用定时器制定函数执行计划 第三章 加载模块 本章提要 加载模块 创建模块 使用node_m ...
- Node.js高级编程读书笔记 - 3 网络编程
Outline 3.4 构建TCP服务器 3.5 构建HTTP服务器 3.6 构建TCP客户端 3.7 创建HTTP请求 3.8 使用UDP 3.9 用TLS/SSL保证服务器的安全性 3.10 用H ...
- Node.js高级编程读书笔记 - 2 文件和进程处理
Outline 3 文件.进程.流和网络 3.1 查询和读写文件 3.2 创建和控制外部进程 3.3 读写数据流 3 文件.进程.流和网络 3.1 查询和读写文件 path 从Node 0.8起,pa ...
- Node.js高级编程读书笔记 - 5 数据库 - Never
Outline 6 连接数据库 6.1 使用node-mysql连接MySQL数据库 6.2 使用Nano连接CouchDB数据库 6.3 使用Mongoose连接MongoDB数据库 6 连接数据库 ...
- ASP.NET MVC5 高级编程-学习日记-第二章 控制器
2.1 控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理, ...
随机推荐
- IntelliJ IDEA 性能优化
idea打开的多了 内存占用也就多了 下边是亲试的优化ide性能的方法 1.设置JVM的启动参数: 进入idea的安装目录的bin文件夹 打开 idea.exe.vmoptions 文件, 修改-Xm ...
- js跨域传值,兼容ie8以上
js跨域传值,兼容ie8以上 事先说明,此方法并不支持ie8,如果想要支持ie8的话,需要用这种思路(来自微软): if (window.addEventListener) { window.addE ...
- Java面试——线程池
1.类比介绍 假如有一个工厂,工厂里面有10个工人,每个工人同时只能做一件任务. 因此只要当10个工人中有工人是空闲的,来了任务就分配给空闲的工人做: 当10个工人都有任务在做时,如果还来了任务,就把 ...
- python——列表入门
学习列表先分析一段程序: list = ['zx', 'xkd', 1997, 2018] list1=list+[1,2,3]#列表拼接 list2=[list,list1] print('嵌套的列 ...
- dir函数
dir函数: dir() 是一个内置函数,用于列出对象的所有属性及方法 下面进行尝试: 用下面两个tests test2文件做实验 #创建一个类,两个常量,类中函数test1,类中属性, class ...
- 直接添加viewController中的view时的注意事项
直接添加viewController中的view时需要注意一个问题,比如: MyTestViewController *vc = [MyTestViewController new]; [self.v ...
- js:捕获冒泡和事件委托
一.事件流(捕获,冒泡) 事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒 ...
- python中subprocess模块
subprocess 模块 subprocess称之为子进程,进程是一个正在进行的程序 子进程是由另一个正在运行的程序启动的程序,例如QQ聊天点击一个链接,打开了浏览器,那么浏览器称之为QQ的子进程 ...
- txt,csv,json互相转化
也没啥,记下来怕忘了.说明都在代码里面: 麻蛋,这个着色好难看 import csv import json #从txt变为csv student_txt=[]; with open("st ...
- linux nginx 基本用法
nginx -s reload -p <nginx环境目录> -c <指定的配置文件> 其中-p -c 为可选,不写为默认路径和配置 在执行命令之前可通过 nginx -t - ...