《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. Requests对HTTPS请求验证SSL证书

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议是由Netscape Communication公司设计开发.该安全协议主 ...

  2. issue_hana

    2019-01-11T14:35:01.910187+08:00 SHADEVDB01 cron[57062]: PAM unable to dlopen(/lib64/security/pam_sy ...

  3. 最近面试 Java 后端的感受!

    来源:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂: 第一能干活,第二Java ...

  4. setTimeout应用例子-移入移出div显示和隐藏

    效果:移入div1,div2保持显示,移出div1,div2消失. 移入div2,div2保持显示,移出div2,div2消失. 一.HTML代码 <div id='div1'></ ...

  5. 微商城分享 包括app分享 微信分享

    <template> <div class="spr"> <img src="../../assets/images/activity/sh ...

  6. java学习笔记(四):import语法

    Import 语法是给编译器寻找特定类的适当位置的一种方法. 创建一个Employee 类,包括四个实体变量姓名(name),年龄(age),职位(designation)和薪水(salary). p ...

  7. Jmeter连接MySQL和SQL Server配置(转载)

    在使用jmeter做性能或自动化测试的时候,往往需要直接对数据库施加压力,或者某些参数只能从数据库获取,这时候就必须使用jmeter连接数据库. 2 下载对应的驱动包 mysql驱动: (mysql- ...

  8. Yii 框架不同逻辑处理方法统一事务处理

    1.定义事务处理接口 <?php namespace frontend\business\SaveRecordByransactions; /** * Interface ISaveForTra ...

  9. python --数据可视化(一)

    python --数据可视化 一.python -- pyecharts库的使用 pyecharts--> 生成Echarts图标的类库 1.安装: pip install pyecharts ...

  10. 24. Swap Nodes in Pairs 链表每2个点翻转一次

    [抄题]: Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2 ...