《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. spring boot 错误处理总结

    在boot 中, 对404  和 异常 有了额外的处理. 当然,我们可以定制, 如何做呢? 1 写一个继承 ErrorController 的Controller 注意, 这里一定要继承 ErrorC ...

  2. netbeans 正则替换

    单引号替换为双引号: tablename1('xhw_aa')  tablename2('xhw_bb') tablename3('xhw_cc') tablename4('xhw_dd')   (t ...

  3. Django 重写用户模型

    AUTH_USER_MODEL = 'myapp.MyUser' django——重写用户模型 Django内建的User模型可能不适合某些类型的项目.例如,在某些网站上使用邮件地址而不是用户名作为身 ...

  4. html网页练习豆瓣网

    html </head> <body>     <!-- 头部 -->     <header class="header1">   ...

  5. CSS表单2 组件排版

    <!DOCTYPE html> <html>     <head>         <title>单选按钮对齐</title>        ...

  6. SpringCloud-day01-简介

    1.spring cloud简介 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载 ...

  7. 大数据入门到精通9-真正得wordcount

    本章节实现一个真正得wordcount 得spark程序. 一.从本地获得一个数据集 val speechRdd= sc.parallelize(scala.io.Source.fromFile(&q ...

  8. Java 基本类型和包装类型

    讲基本类型和包装类型之前,首先要介绍,装箱和拆箱 装箱:基本类型转化为包装类型 拆箱:包装类型转化为拆箱类型 为什么要有包装类型?Java是面向对象的语言,Java中一切都是对象除了基本数据类型,所以 ...

  9. 42 【docker】run命令

    最常用的两个option是,网络端口映射,和文件共享 最基本的启动命令(从image创建一个container并启动):docker run -d <image-name> -d:表示守护 ...

  10. 706. Design HashMap 实现哈希表

    [抄题]: public MyHashMap() {  主函数里面是装非final变量的,如果没有,可以一个字都不写 } [暴力解法]: 时间分析: 空间分析: [优化后]: 时间分析: 空间分析: ...