《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. SpringMVC 数组类型的参数: Cannot generate variable name for non-typed Collection parameter type

    我只想安静的传个数组类型的参数, 为什么各种报错... @DeleteMapping("del") @ApiOperation(value = "删除") pu ...

  2. TCARS: Time- and Community-Aware Recommendation System(时间感知和社区感知推荐系统)

    随着用户在物品上产生了大量行为,推荐系统成为了线上系统的重要组成部分.推荐系统算法使用用户对物品的行为信息以及上下文数据为每个用户推荐一组物品.算法根据用户之间及物品之间的相似度建立.本文介绍了一个基 ...

  3. tensorflow实战系列(四)基于TensorFlow构建AlexNet代码解析

    整体流程介绍: 我们从main函数走,在train函数中,首先new了一个network;然后初始化后开始训练,训练时设定设备和迭代的次数,训练完后关闭流程图. 下面看network这个类,这个类有许 ...

  4. virtual 函数只有在用指针或引用的方式访问,才会导致多态。

    只有用指针和引用,才会动态绑定.才会在运行时候从虚表中找对应的成员函数. 如果只是用.访问成员函数,是静态绑定,在编译时刻就固定好的. 另外,父类的虚函数,子类不管加不加virtual关键字,都是虚函 ...

  5. 30个php操作redis常用方法代码例子(转载)

    1.connect 描述:实例连接到一个Redis.参数:host: string,port: int返回值:BOOL 成功返回:TRUE;失败返回:FALSE示例: $redis = new red ...

  6. spring boot+kafka整合

    springboot版本是2.0.4 首先,在maven中引入spring-kafka的jar包 <dependency> <groupId>org.springframewo ...

  7. OpenStack安装-MySQL,Rabbitmq,memcache.

    基于前一篇的基本环境,现在我们开始安装MySQL. 在node1上面安装MySQL: [root@linux-node1 ~]# yum install mariadb mariadb-server ...

  8. 真机调试adb:wait for device 解决方案

    1.adb logcat 命令的时候,cmd总是提示adb server did't ACK.       分析一下,明显adb server没有开启成功,服务启动失败一般都是端口绑定失败,所以我们只 ...

  9. Codeforces Round #449 (Div. 2)

    Codeforces Round #449 (Div. 2) https://codeforces.com/contest/897 A #include<bits/stdc++.h> us ...

  10. 134. Gas Station加油站

    [抄题]: There are N gas stations along a circular route, where the amount of gas at station i is gas[i ...