《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

目录

  1. 安装Node
  2. Node 简介
  3. 加载模块
  4. 应用缓冲区处理、编码和解码
  5. 使用事件驱动发射器模式简化事件
  6. 使用定时器制定函数执行计划
  7. 查询和读写文件
  8. 创建和控制外部进程
  9. 读写数据流
  10. 构建TCP服务器
  11. 构建HTTP服务器
  12. 构建TCP客户端
  13. 创建HTTP请求
  14. 使用用户数据报?
  15. 使用TLS/SSL保证服务器的安全
  16. 用HTTPS保证HTTP服务器的安全
  17. 测试模块及其应用程序
  18. 调试模块
  19. 控制回调流程
  20. 构建使用HTTP中间件
  21. 用Express.js创建Web应用程序
  22. 使用Socket.IO创建通用的实时Web应用
  23. 使用node-mysql
  24. 使用Nano连接CouchDB
  25. 使用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 高级编程》简介与第二章笔记的更多相关文章

  1. Node.js高级编程读书笔记Outline

    Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...

  2. Node.js高级编程读书笔记 - 1 基本概念

    Outline 1 概述和安装 1.1 安装Node 1.2 Node简介 2 Node核心API基础 2.1 加载模块 2.2 应用缓冲区处理.编码和解码二进制数据 2.3 使用时间发射器模式简化事 ...

  3. Node.js高级编程读书笔记 - 6 应用程序构建和调试 - Never

    Explanation 现阶段console.log(...),util.inspect(...), JSON.stringify(...)在控制台输出已经够用了[2015/07/19]. 单元测试隶 ...

  4. Node.js高级编程读书笔记 - 4 构建Web应用程序

    Outline 5 构建Web应用程序 5.1 构建和使用HTTP中间件 5.2 用Express.js创建Web应用程序 5.3 使用Socket.IO创建通用的实时Web应用程序 5 构建Web应 ...

  5. 《Node.js高级编程》之Node 核心API基础

    Node 核心API基础 第三章 加载模块 第四章 应用缓冲区 第五章 事件发射器模式简化事件绑定 第六章 使用定时器制定函数执行计划 第三章 加载模块 本章提要 加载模块 创建模块 使用node_m ...

  6. 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 ...

  7. Node.js高级编程读书笔记 - 2 文件和进程处理

    Outline 3 文件.进程.流和网络 3.1 查询和读写文件 3.2 创建和控制外部进程 3.3 读写数据流 3 文件.进程.流和网络 3.1 查询和读写文件 path 从Node 0.8起,pa ...

  8. Node.js高级编程读书笔记 - 5 数据库 - Never

    Outline 6 连接数据库 6.1 使用node-mysql连接MySQL数据库 6.2 使用Nano连接CouchDB数据库 6.3 使用Mongoose连接MongoDB数据库 6 连接数据库 ...

  9. ASP.NET MVC5 高级编程-学习日记-第二章 控制器

    2.1 控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理, ...

随机推荐

  1. 《算法导论》——计数排序Counting Sort

    今天贴出的算法是计数排序Counting Sort.在经过一番挣扎之前,我很纠结,今天这个算法在一些scenarios,并不是最优的算法.最坏情况和最好情况下,时间复杂度差距很大. 代码Countin ...

  2. Shell脚本1-20例

    1.每天生成一个文件 描述:请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑cron ...

  3. java判断是否是数字

    1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ ...

  4. Linux命令:mapfile

    mapfile [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] [数组] 两个作用: 一是给index数组读取标准输入来赋值:二是文件描述 ...

  5. python中安装request模块

    使用命令行(cmd)进入到python安装目录下的Scripts文件夹(也可以先进入目标文件夹然后在文件路径上打开cmd回车即可) 在命令行中输入pip install requests,等待安装完成 ...

  6. Node.js 初识1

    测试:让Node.js运行脚本 1.创建一个脚本 js1.js console.log('测试'); 2.cmd界面 运行脚本

  7. 学习日 day1

    今天第一天开始写博客,希望以后能坚持,每天写,一是记录自己学习的历程,更重要的是复习每天学过的东西. 今天学习的内容:time模块的相关语法 导入方式 首行输入import time即可 time.t ...

  8. linux下安装haproxy作为端口转发服务器,以及安装keepalived作为haproxy高可用方案

    一.安装haproxy作为端口转发服务器(主服务器:172.28.5.4,备服务器:172.28.5.8,浮点IP为:172.28.5.6) 1.安装依赖包 yum -y install wget g ...

  9. centos系统有多个内核,修改默认启动内核

    打开系统文件 vim  /boot/grub/grub.conf default=0,意思是GRUB在默认情况下,也就是用户没有选择的情况下,去启动显示在用户界面的第一个系统:GRUB启动系统时是从0 ...

  10. oracle数据库分页总结

    /* BEGIN CREATE TABLE APPUSER(IDS NUMBER(8), USERNAME VARCHAR2(20), PASSWORD VARCHAR2(20), CTIME DAT ...