《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

目录

  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,有第一类函数和闭包
原文地址:https://www.cnblogs.com/carvendy/p/7821363.html