《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
目录
- 安装Node
- Node 简介
- 加载模块
- 应用缓冲区处理、编码和解码
- 使用事件驱动发射器模式简化事件
- 使用定时器制定函数执行计划
- 查询和读写文件
- 创建和控制外部进程
- 读写数据流
- 构建TCP服务器
- 构建HTTP服务器
- 构建TCP客户端
- 创建HTTP请求
- 使用用户数据报?
- 使用TLS/SSL保证服务器的安全
- 用HTTPS保证HTTP服务器的安全
- 测试模块及其应用程序
- 调试模块
- 控制回调流程
- 构建使用HTTP中间件
- 用Express.js创建Web应用程序
- 使用Socket.IO创建通用的实时Web应用
- 使用node-mysql
- 使用Nano连接CouchDB
- 使用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 高级编程》简介与第二章笔记的更多相关文章
- Node.js高级编程读书笔记Outline
Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...
- Node.js高级编程读书笔记 - 1 基本概念
Outline 1 概述和安装 1.1 安装Node 1.2 Node简介 2 Node核心API基础 2.1 加载模块 2.2 应用缓冲区处理.编码和解码二进制数据 2.3 使用时间发射器模式简化事 ...
- Node.js高级编程读书笔记 - 6 应用程序构建和调试 - Never
Explanation 现阶段console.log(...),util.inspect(...), JSON.stringify(...)在控制台输出已经够用了[2015/07/19]. 单元测试隶 ...
- Node.js高级编程读书笔记 - 4 构建Web应用程序
Outline 5 构建Web应用程序 5.1 构建和使用HTTP中间件 5.2 用Express.js创建Web应用程序 5.3 使用Socket.IO创建通用的实时Web应用程序 5 构建Web应 ...
- 《Node.js高级编程》之Node 核心API基础
Node 核心API基础 第三章 加载模块 第四章 应用缓冲区 第五章 事件发射器模式简化事件绑定 第六章 使用定时器制定函数执行计划 第三章 加载模块 本章提要 加载模块 创建模块 使用node_m ...
- 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 ...
- Node.js高级编程读书笔记 - 2 文件和进程处理
Outline 3 文件.进程.流和网络 3.1 查询和读写文件 3.2 创建和控制外部进程 3.3 读写数据流 3 文件.进程.流和网络 3.1 查询和读写文件 path 从Node 0.8起,pa ...
- Node.js高级编程读书笔记 - 5 数据库 - Never
Outline 6 连接数据库 6.1 使用node-mysql连接MySQL数据库 6.2 使用Nano连接CouchDB数据库 6.3 使用Mongoose连接MongoDB数据库 6 连接数据库 ...
- ASP.NET MVC5 高级编程-学习日记-第二章 控制器
2.1 控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理, ...
随机推荐
- Requests对HTTPS请求验证SSL证书
SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议是由Netscape Communication公司设计开发.该安全协议主 ...
- issue_hana
2019-01-11T14:35:01.910187+08:00 SHADEVDB01 cron[57062]: PAM unable to dlopen(/lib64/security/pam_sy ...
- 最近面试 Java 后端的感受!
来源:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂: 第一能干活,第二Java ...
- setTimeout应用例子-移入移出div显示和隐藏
效果:移入div1,div2保持显示,移出div1,div2消失. 移入div2,div2保持显示,移出div2,div2消失. 一.HTML代码 <div id='div1'></ ...
- 微商城分享 包括app分享 微信分享
<template> <div class="spr"> <img src="../../assets/images/activity/sh ...
- java学习笔记(四):import语法
Import 语法是给编译器寻找特定类的适当位置的一种方法. 创建一个Employee 类,包括四个实体变量姓名(name),年龄(age),职位(designation)和薪水(salary). p ...
- Jmeter连接MySQL和SQL Server配置(转载)
在使用jmeter做性能或自动化测试的时候,往往需要直接对数据库施加压力,或者某些参数只能从数据库获取,这时候就必须使用jmeter连接数据库. 2 下载对应的驱动包 mysql驱动: (mysql- ...
- Yii 框架不同逻辑处理方法统一事务处理
1.定义事务处理接口 <?php namespace frontend\business\SaveRecordByransactions; /** * Interface ISaveForTra ...
- python --数据可视化(一)
python --数据可视化 一.python -- pyecharts库的使用 pyecharts--> 生成Echarts图标的类库 1.安装: pip install pyecharts ...
- 24. Swap Nodes in Pairs 链表每2个点翻转一次
[抄题]: Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2 ...