回调函数

Express 初学笔记

十年热恋 提交于 2019-12-05 14:52:03
看了express很多次,都是懵懵的,这次居然看得有些明白了。整理一篇笔记吧~ Express是什么? 官网 是这么说的:基于Node.js平台,快速、开放、极简的web开发框架。 嗯,express就是一个Node.js框架。他自身功能非常简单,就是在调用各种中间件。 创建Express应用 创建一个Express应用非常简单,官网上面有一个 Hello world实例 ,试一下就懂了,不再多说。 路由 下面来说一下路由, 路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。 路由的结构如下: app.METHOD(path, [callback...], callback); 其中,app是express的一个实例。METHOD 是HTTP请求方法,例如:get、post、put等,path是路径,callback是匹配到该路径时要执行的回调函数。可以定义多个callback。 例如: var express = require('express'); var app = express(); app.get('/school', (req, res) => { res.send(‘Hello world’); }) 当匹配到/school 这个路径的时候,回调函数就会被执行,返回给客户端'Hello world'。要注意的是,这个回调函数中

Nodejs学习笔记(九)--- 与Redis的交互(mranney/node_redis)入门

旧巷老猫 提交于 2019-12-05 14:42:06
目录 简介和安装 redis简介 redis安装 redis运行 node_redis安装 连接到redis服务器redis.createClient() 认证 client.auth(password, callback) 单值set和get client.set(key,value,[callback]) client.get(key,[callback]) client.set([key,value],callback) 多值get和set client.hmset(hash,obj,[callback]) client.hmset(hash,key1,val1, ... keyn,valn,[callback]) client.hgetall(hash,[callback]) 打包执行多个命令[事务] 其它... 简介和安装 redis简介: 开源高性能key-value存储;采用内存中(in-memory)数据集的方式,也可以采用磁盘存储方式(前者性能高,但数据可能丢失,后者正好相反) 支持字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等;支持对复杂数据结构的高速操作。 特性多,支持主从同步、pub/sub等 支持多种客户端( http://redis.io/clients ) ...   注

8.Python与C之回调函数定义

二次信任 提交于 2019-12-05 14:35:39
通过工厂方法创建一个类。 传入参数第一个是返回参数,后面所有都是传入参数类型。 两个工厂方法 CFUNCTYPE() cdecl的形式调用方法。 WINFUNCTYPE() stdcall的方式调用方法。 通过工厂方法建造出来的类来转义 python 定义的方法。 from ctypes import * ret = CFUNCTYPE(c_int,POINTER(c_int),POINTER(c_int)) def cmp(a,b): return a[0]-b[0] cmp_func = ret(cmp) arrays = (c_int*6)(2,3,2,78,12,53) cdll.msvcrt.qsort(byref(arrays),len(arrays),sizeof(c_int),cmp_func) for i in range(6): print(arrays[i]) 回调函数生命周期 如果发现回调函数没有被引用,那么就可能会被垃圾回收期回收。 如果方法在 Python 可控范围外调用,也就是说在其他代码中调用,如这里的 qsort 回调,就是在C中调用。ctypes将会为每一次调用创建一个新的仿真线程。大多数情况下没有问题,但是调用过程中,在 threading.local 中存储的数据无法避免的被释放,即使在同一个C线程中。 装饰器的方式调用 from

C++ 回调函数 Callback 机制例程

纵然是瞬间 提交于 2019-12-05 14:33:49
#include <iostream> #include <thread> #include <mutex> #include <Windows.h> // callback test ///////////////////////////////////////////////////////////// // API part typedef void(__stdcall *CallbackEvent)(const char* pStr, bool bOK, void * any); ///////////////////////////////////////////////////////////// // API part class API { public: API() = delete; API(CallbackEvent pCallBack, const char* pStr, bool bOK, void * any=nullptr) : mpStr (pStr ) , mbOK (bOK ) , mpCallBack(pCallBack) , mAny (any) { mThread = std::make_unique<std::thread>(&API::run, this); mThread->detach(); } ~API(){}; void run

《深入浅出NodeJS》读书笔记

爷,独闯天下 提交于 2019-12-05 14:33:48
 NodeJS NodeJS 4 个特点: 异步 I/O, 事件驱动与回调, 单线程事件轮询, 跨平台。 NodeJS 5 个大坑:异常处理,嵌套太深,没有 Sleep ,多线程编程,异步转同步。 NodeJS 4 种提升性能的方法: 动静分离, 缓存( Redis ) , 多进程, 数据库读写分离。 NodeJS 简介 模块机制 异步 I/O 异步编程 内存控制 Buffer 网络编程 构建 Web 多进程 测试 产品化 调试 NodeJS 编程规范 NodeJS 简介 高性能,符合时间驱动,没有历史包袱这三个主要原因, JavaScript 成为了 Node 的实现语言。 NodeJS 基于 Google V8 引擎。 Node 优秀的运算能力主要来自 V8 的深度优化。 NodeJS 特点:异步 I/O, 事件驱动与回调函数, 单线程事件轮询,跨平台 NodeJS 单线程的缺点: 无法利用多核 CPU. 错误会引起整个应用进程退出。 大量计算占用 CPU 导致无法继续调用异步 I/O. 解决单线程缺点的方法是引入子进程方法( Cluster, 见后边)和 C/C++ 模块扩展(利用它们的多线程机制)。 模块机制 Node 出现之前,服务器端的 JS 基本没有市场的。 CommonJS 主要是为了弥补当前 JS 没有标准的缺陷,希望 JS 能够在任何地方运行。 模块引用

Nodejs里面的express的框架

孤街醉人 提交于 2019-12-05 14:20:21
Express的官网 http://expressjs.com/zh-cn/ <1>express 框架 Express是目前最流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站。 Express上手非常简单,首先新建一个项目目录,假定叫做hello-world。 $ mkdir hello-world 进入该目录,新建一个package.json文件,内容如下。 { "name": "hello-world", "description": "hello world test app", "version": "0.0.1", "private": true, "dependencies": { "express": "4.x" } } 上面代码定义了项目的名称、描述、版本等,并且指定需要4.0版本以上的Express。 然后,就可以安装了。 $ npm install 执行上面的命令以后,在项目根目录下,新建一个启动文件,假定叫做index.js。 var express = require('express'); var app = express(); app.use(express.static(__dirname + '/public')); app.listen(8080); 然后,运行上面的启动脚本。 $ node index 现在就可以访问

Node.js(基础知识一)

喜夏-厌秋 提交于 2019-12-05 14:15:09
NPM是NodeJS包管理工具; package.json用于定义包的属性; Node.js自带REPL(交互式解释器)。 Node.js的异步实现 Node.js异步编程的直接体现就是回调。 异步编程依托于 回调 来实现,但不是使用了回调就实现了异步。 回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有API都支持回调函数。 Node.js是单进程、单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 Node.js的每一个API都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。 Node.js基本上所有的事件机制都是用设计模式中观察者模式实现。 Node.js单线程类似进入一个while(true)的事件循环,直到没有事件观察者之后就退出,每个异步事件都产生一个事件观察者,如果有事件发生就调用该回调函数。 Node.js使用 事件驱动模型 ,当web server接受到请求,就把开启相应的API进行处理,然后去服务下一个web请求。 当这个请求完成,它被放回处理队列,当到达队列的开头,这个结果被返回给用户。 因为web server一直接受请求而不等待任何读写操作,因此称为非阻塞IO或事件驱动IO。 在Node应用中,很多API继承自EventEmitter, 具有许多可以异步执行的函数

nodejs原理

允我心安 提交于 2019-12-05 14:12:04
即使还没有用nodejs写过什么项目,但是,核心中的核心,原理中的原理,maybe已经掌握到了。 先说nodejs和java对于并发处理上到区别。 java是最熟悉的了,所有人都知道,java在处理并发业务的时候是直接开一个线程去做。如下图所示 即使新开了线程,在并发更高的情况下,还是会出现等待,这是必然的。多个线程的并行运行,cpu会不断的在线程的上下文之间切换,会增加服务器的负担,多线程的创建和删除也会产生内存上的负担和GC的负担。当一个线程去完成一个业务的时候如果遇到IO操作还是会让线程进行阻塞,也就是说拜托不了任务同步的问题。 但是nodejs的处理方式是孑然不同,因为它的特点是单线程,异步IO,事件循环。 先说nodejs的单线程。关于它的单线程,有一个最直观的理解就是开发者不能自己新建线程去处理一个任务,对于web应用所有的请求的处理都是在一个主线程中完成的,所有请求的处理和请求的响应都是在一个线程中。这样的话当前的cpu只对当前的任务进行处理,不会同时处理多个请求,自然也就不需要像java那样需要锁,加锁,解锁,死锁各种问题。但是你也不能理解成进来一个请求就处理,处理完之后再处理下一个请求,这样的话也太low了吧。这里就提到了异步io 异步io的意思就是当主线程处理请求遇到io操作的时候不会由主线程自己去完成(因为这样会造成主线程的阻塞),而是交给libuv

Node.js异步编程带来的难点

怎甘沉沦 提交于 2019-12-05 14:01:53
前言 Node使得异步编程首次出现在业务层面,它借助异步I/O模型和V8高性能引擎(事件循环机制),突破单线程的性能瓶颈,让JavaScript在后端达到了实用价值。由于这种异步编程的出现,对于node,也会出现一些难点。 难点1 异常处理 说到异常捕获,相信大家都会想到try/catch/final,但是对于异步编程这种方式并不适用。 伪代码如下: try{ async(callback); }catch(e){ } 假设async是一个异步方法,调用async方法后,就会产生一个事件,事件(callback)会被放入该有的队列中,到了下一次事件循环(Tick),会却从队列中取出,把回调的内容传递给异步函数。因为这种情况,对异步方法进行try/catch操作只能捕获当次事件循环内的异常,对callback执行回调时候抛出的异常是无能为力的。 由于这种异常捕获的难点,Node在处理异常上形成了一种约定,将异常作为回调函数第一个实参传回,如果为空值,则表明异步调用没有异常抛出。 异步方法调用例子 async(function(err,result){ //TOO }) 我们在代码编写过程中,自己编写的异步方法,也要遵循这样一些规则。 必须执行调用者传入的回调函数 正确传递回异常共调用者判断 异步方法代码例子如下 var async=function(callback){

ajax异步请求的三种方式

这一生的挚爱 提交于 2019-12-05 13:58:51
Ajax能够在无需加载整个页面的情况下,能够更新部分网页内容,可以减小服务器的资源浪费。 ajax大体上有四种实现方式,由于基于JS的实现方式太过于复杂,基本上用不到,所以就暂不贴出其实现代码了。 1.使用$.ajax()发送异步请求 $.ajax的参数列表如下: url:异步请求的路径。 type:请求方式,常见参数为post,get等等。 dataTpye:接收到的服务器响应数据的格式。 data:请求参数,一般以json方式发送。 success:function(data):响应成功后的回调函数,参数data通常情况下是服务器返回的json格式的数据。 error:function():请求响应出现错误的情况下,执行的回调函数。 $.ajax({ url:"/login.do" , type:"POST" , dataType:"text", data:{"name":"zhangbo"}, success:function (data) { alert(data); }, error:function () { alert("请求响应错误"); } }); 2.使用$.get()发送get请求 $.get(url, [data], [callback], [type])的参数列表如下: url:异步请求的路径。 data:请求参数,一般以json方式发送。