NODE编程(二)--异步编程技术
在Node世界里流行两种响应逻辑管理方式,回调和事件监听。
回调通常用来定义一次性响应的逻辑。比如对于数据的查询,可以指定一个回调函数来确定如何处理查询结果。
事件监听器,本质上也是一个回调,不同的是,它跟一个概念实体(事件)相关联。在Node中,当有HTTP请求过来是,HTTP服务器会发出一个请求事件。你可以监听这个请求事件,并添加一些响应逻辑。
一、用回调处理一次性事件
回调是一个函数,它被当做参数传给异步函数,它描述了异步操作完成之后要做什么。
/*在简单的程序重使用回调*/ var http = require('http');
var fs = require('fs'); http.createServer(function(req,res){ //创建HTTP服务器并用回调定义响应逻辑
if(req.url == '/'){
fs.readFile('./title.json',function(err,data){ //读取JSON文件并用回调定义如何处理其中的内容
if(err){ //如果出错,输出错误日志,并给客户端返回‘server ERROR’
console.error(err);
res.end('Sever ERROR');
}else{
var titles = JSON.parse(data.toString());
fs.readFile('./template.html',function(err,data){ //读取HTML模板,并加载完成后使用回调
if(err){
console.error(err);
res.end('SERVER ERROR');
}else{
var tmpl = data.toString();
var html = tmpl.replace('%',titles.join('</li><li>')); //组装HTML页面以显示博客标题
res.writeHead(200,{'Content-Type':'text/html'});
res.end(html); //将HTML页面发送给用户
} })
}
})
}
}).listen(8000,"127.0.0.1");
上面这个例子嵌入了三个回调.
Node的异步回调惯例:
Node中的大多数内置模块在使用回调的时候后都会带两个参数:第一个是用来放可能会发生的错误,第二个放结果。错误参数经常被缩写成er或err。
二、用事件发射器处理重复性事件。
事件发射器会触发事件,并且在那些事件被触发时能处理它们。一些重要的Node API组件,比如HTTP服务器,TCP服务器、流都被做成了事件发射器。
事件是通过监听器进行处理的。监听器是跟事件相关联的,带有一个事件出现时就会被触发的回调函数。
比如,Node中的TCP sockt,它有一个data时间,每当socket中有新数据时就会触发:
socket.on('data',handleData);
三、异步逻辑的顺序化
让一组异步任务顺序执行的概念在node社区被称之为流程控制,分为:串行和并行。
需要一个接着一个做的任务叫做串行任务。不需要一个接一个做,两个或多个人物同步进行叫做并行任务。这些任务彼此之间开始和结束的时间并不重要,但在后续逻辑执行之前他们应该全部做完。
NODE编程(二)--异步编程技术的更多相关文章
- Node.js之异步编程
> 文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. ![file](https://img2018.cnblogs.com/blog/830272/20 ...
- C#复习笔记(5)--C#5:简化的异步编程(异步编程的基础知识)
异步编程的基础知识 C#5推出的async和await关键字使异步编程从表面上来说变得简单了许多,我们只需要了解不多的知识就可以编写出有效的异步代码. 在介绍async和await之前,先介绍一些基础 ...
- C#并发编程之异步编程2
C#并发编程之异步编程(二) 写在前面 前面一篇文章介绍了异步编程的基本内容,同时也简要说明了async和await的一些用法.本篇文章将对async和await这两个关键字进行深入探讨,研究其中 ...
- 【憩园】C#并发编程之异步编程(一)
写在前面 C#5.0中,对异步编程进行了一次革命性的重构,引入了async和await这两个关键字,使得开发人员在不需要深刻了解异步编程的底层原理,就可以写出十分优美而又代码量极少的代码.如果使用得当 ...
- .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)
本文内容 异步编程类型 异步编程模型(APM) 参考资料 首先澄清,异步编程模式(Asynchronous Programming Patterns)与异步编程模型(Asynchronous Prog ...
- Node单线程与异步编程的初步理解
最近学习了一些关于node的单线程与异步的知识,想拿过来和大家分享下: var async = require('async') //并行无关联,等待事件为最长时间请求过程.如以下两个任务执行时间 c ...
- 深入浅出Node.js (4) - 异步编程
4.1 函数式编程 4.1.1 高阶函数 4.1.2 偏函数用法 4.2 异步编程的优势与难点 4.2.1 优势 4.2.2 难点 4.3 异步编程解决方案 4.3.1 事件发布/订阅模式 4.3.2 ...
- 【憩园】C#并发编程之异步编程(二)
写在前面 前面一篇文章介绍了异步编程的基本内容,同时也简要说明了async和await的一些用法.本篇文章将对async和await这两个关键字进行深入探讨,研究其中的运行机制,实现编码效率与运行效率 ...
- Java网络编程中异步编程的理解
目录 前言 一.异步,同步,阻塞和非阻塞的理解 二.异步编程从用户层面和框架层面不同角度的理解 用户角度的理解 框架角度的理解 三.为什么使用异步 四.理解这些能在实际中的应用 六.困惑 参考文章 前 ...
- 【憩园】C#并发编程之异步编程(三)
写在前面 本篇是异步编程系列的第三篇,本来计划第三篇的内容是介绍异步编程中常用的几个方法,但是前两篇写出来后,身边的朋友总是会有其他问题,所以决定再续写一篇,作为异步编程(一)和异步编程(二)的补 ...
随机推荐
- POJ-1002 解题报告
1.题目描述 http://poj.org/problem?id=1002 2.解题过程 按部就班来解题的话,这个题目很容易写出来,这是我的第一个版本的代码,思路是读入一行电话字符串,均转化为整型 ...
- HDU 4861 Couple doubi (数论 or 打表找规律)
Couple doubi 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/D Description DouBiXp has a ...
- [iOS基础控件 - 6.9.2] 静态单元格 QQ功能列表
使用storyboard设计静态的表格数据 A.实现步骤 1.控制器继承UITableViewController 2.在storyboard中使用TableViewController,删除原来 ...
- 13个Cat命令管理文件实例汇总
在Linux系统中,大多数配置文件.日志文件,甚至shell脚本都使用文本文件格式,因此,Linux系统存在着多种文本编辑器,但当你仅仅想要查看一下这些文件的内容时,可使用一个简单的命令-cat. c ...
- java数字保留两位小数四舍五入
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public c ...
- Educational Codeforces Round 15 (A - E)
比赛链接:http://codeforces.com/contest/702 A. Maximum Increase A题求连续最长上升自序列. [暴力题] for一遍,前后比较就行了. #inclu ...
- PC 端微信扫码注册和登录
一.前言 先声明一下,本文所注重点为实现思路,代码及数据库设计主要为了展现思路,如果对代码效率有着苛刻要求的项目切勿照搬. 相信做过微信开发的人授权这块都没少做过,但是一般来说我们更多的是为移动端的网 ...
- Tiny6410声卡驱动——录音与回放
在Linux下,音频设备程序的实现与文件系统的操作密切相关.Linux将各种设备以文件的形式给出统一的接口,这样的设计使得对设备的编程与对文件的操作基本相同,对Linux内核的系统调用也基本一致,从而 ...
- OpenNebula Restfull 接口请求示例
Fri Jun 20 07:28:20 2014 [I]: 10.0.2.2 - - [20/Jun/2014 07:28:20] "POST /vmtemplate HTTP/1.1&qu ...
- ThinkPHP3.1.3的单字母函数汇总
A函数: 用于实例化Action 格式:[项目://][分组/]模块 /** * A函数用于实例化Action 格式:[项目://][分组/]模块 * @param string $name Acti ...