《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模式中的控制器主要关注的是应用程序流.输入数据的处理, ...
随机推荐
- 【机器学习_5】Anaconda:初学Python、入门机器学习的首选
Anaconda是一个用于科学计算的Python发行版,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存.切换以及各种第三方包安装问题. 集成包功能: NumPy:提供了矩阵运算的 ...
- android toolbar效果3
Title居中,只有一个右边按钮 activity_main.xml: <?xml version="1.0" encoding="utf-8"?> ...
- node.js获取本机Ip, hostName, mac
//获取ip地址 getIPAdress() { let interfaces = require('os').networkInterfaces(); for (var devName in int ...
- spring jdbc学习1
1.queryForObject - 其中的 RowMapper 指定如何去映射结果集的行, 常用的实现类为 BeanPropertyRowMapper - 使用 SQL 中列的别名完成列名和类的属性 ...
- Sphinx 安装与使用
Sphinx 优点 高速索引(接近10M/S) 高速搜索(2-4G文本搜索耗时不到0.1秒) 高可用性(单CPU支持100GB文本,100M文档) 提供相关性排名.分布式搜索.文档摘要(高亮显示) S ...
- Delphi中Chrome Chromium、Cef3学习笔记(二)
原文 http://blog.csdn.net/xtfnpgy/article/details/46635739 用Tchromium替换webbrowser 用惯了EmbeddedWB,不想 ...
- TensorFlow学习之四
Tensorflow一些常用基本概念与函数(1) 摘要:本文主要对tf的一些常用概念与方法进行描述. 1.tensorflow的基本运作 为了快速的熟悉TensorFlow编程,下面从一段简单的代码开 ...
- SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作
在开发或者测试环境的数据库中,经常会发现有开发或者测试人员误删除表或者数据的情况,对于开发或者测试库,一般都没有安排定时的备份任务去备份数据库,一方面是由于存储资源有限,不太可能给开发或者测试环境准备 ...
- 281. Zigzag Iterator z字型遍历
[抄题]: Given two 1d vectors, implement an iterator to return their elements alternately. Example: Inp ...
- SpringAOP日志配置
SpringAOP日志配置 配置文件配置 l 配置spring-mvc.xml <aop:config proxy-target-class="true" /> &l ...