异步API
Hiredis 拥有一个套异步API方便与一些事件库协同工作.
Hiredis的代码中涵盖了hiredis与libev和libevent这两个库结合使用的例子.
连接
函数redisAsyncConnect
用来建立到redis服务器的非阻塞连接.
返回一个redisAsyncContext
结构体指针.因为建立的连接是非阻塞的,无法立即返回目标主机的ip和端口是否可达。所以在建立连接后,我们应该检查err
成员,来确认连接是否存在错误。
redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
if (c->err) {
printf("Error: %s\n", c->errstr);
// 错误处理
}
redisAsyncContext包含一个连接断开回调函数(主动断开,或者发生错误都会调用)。此函数原型如下:
void(const redisAsyncContext *c, int status);
当用户主动断开连接时, 参数status
被设置为REDIS_OK
;
当发生错误而导致连接断开时status
被设置为REDIS_ERR
。此时我们可以根据err
成员变量判断错误产生的情况。
当我们需要进行断线重连时,可以在断开连接回调函数处理。
每个上下文(redisAsyncContext)实例只能设置一次断线回调函数,多次调用会返回REDIS_ERR
错误。
使用以下函数设置断线回调函数:
int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn);
发送命令并设置回调
使用redisAsyncContext时,(每帧)发送的命令会自动pipelined(打包发送命令)。所以我们需要设置reply回调函数来进行命令执行后的处理工作。回调函数原型如下:
void(redisAsyncContext *c, void *reply, void *privdata);
参数privdata
为用户数据,你可以设置成函数调用时所需要的任意数据。
使用以下函数发送异步命令:
int redisAsyncCommand(
redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,
const char *format, ...);
int redisAsyncCommandArgv(
redisAsyncContext *ac, redisCallbackFn *fn, void *privdata,
int argc, const char **argv, const size_t *argvlen);
这两个函数和阻塞版本类似。命令成功添加到输出缓冲区时返回REDIS_OK
,错误时返回REDIS_ERR
。
例如:当连接被用户中断时,新命令无法被添加,所有类似redisAsyncCommand
的函数调用都返回REDIS_ERR
错误码。
如果将回调函数设置成NULL
(? privdata,还是reply?需要实验一下
?)内存被立即释放。当回调函数非空,则内存在调用后释放内存。reply参数只能在回调函数体中使用。
当上下文(redisAsyncContext)发生错误时所有未执行的命令所设置的回调函数都会被调用,回调函数中reply指针为空。
断开连接
异步连接可以使用以下函数终止:
void redisAsyncDisconnect(redisAsyncContext *ac);
当函数被调用时连接并不是立即被断开,而是新的命令不在被接受。(调用函数后)当所有未执行的指令都被写入到socket中,并且命令回调函数都被执行以后,连接才被中断(连接中断回调函数被调用,status为REDIS_OK
)、上下文对象被释放。.
绑定到事件库
There are a few hooks that need to be set on the context object after it is created. See theadapters/
directory
for bindings tolibevandlibevent.
分享到:
相关推荐
使用Ruby构建异步API服务,对比各个方案的效率,如rails api,sinatra,grape和goliath等。
微信小程序异步API同步化研究.pdf
异步API是淘宝开放平台提供的,采用异步化调用流程的一类API。其调用方式,与其他同步的API调用方式无异,只是在调用-处理流程上采用异步化的方式。采用异步API的目的是希望大数据量的结果能够通过一种更高效的方式...
微信小程序异步API同步化研究
在C++中,API有很多模型,其中选择了异步选择模型来介绍一下
用于API的异步HTTP请求测试库
使用Win32API实现Windows下异步串口通讯 目录:1.异步非阻塞串口通讯的优点2.异步非阻塞串口通讯的基本原理3.异步非阻塞串口通讯的基础知识4.异步非阻塞串口通讯的实现步骤一,异步非阻塞串口通讯的优点读写...
hiredis 提供了同步、异步访问,异步 API 需要与一些事件库协同工作,主要看一下同步API的实现。 hiredis 与服务端通信的API比较简单,主要有这几个步骤: 建立连接 发送命令 等待结果并处理 释放连接
异步和WebApi结合案例
amdjs-api, 存储异步模块定义 API 这个 repo 包含AMD的API规范和一些与AMD强相关的API 。AMD: 异步模块定义。 用于引用和定义模块JS代码的主要构建 block 。需要: require() 函数的API,允许动态。异步加载模块,...
使用Win32API实现Windows下异步串口通讯:目录:1. 异步非阻塞串口通讯的优点2. 异步非阻塞串口通讯的基本原理3. 异步非阻塞串口通讯的基础知识4. 异步非阻塞串口通讯的实现步骤
把微信小程序异步API转化为Promise。用Promise处理异步操作有多方便,谁用谁知道。 微信官方没有给出Promise API来处理异步操作,而官方API异步的又非常多,这使得多异步编程会层层回调,代码一复杂,回调起来就想砸...
异步串口函数原理,举例,API函数指导并有例子
把微信小程序异步API转化为Promise。用Promise处理异步操作有多方便,谁用谁知道。 微信官方没有给出Promise API来处理异步操作,而官方API异步的又非常多,这使得多异步编程会层层回调,代码一复杂,回调起来就想...
使用 ,此框架应在API项目中生成操作,以启用具有进程内后台服务和分布式缓存的。 内部构造 遵循异步请求-响应模式的生成的动作使用ConcurrentQueue)>>将实际长时间运行的动作与运行时生成的GUID一起用于队列,以...
使用oatpp异步API。 看更多:概述该项目正在使用和模块。项目布局|- CMakeLists.txt // projects CMakeLists.txt|- src/| || |- controller/ // Folder containing Controller where all endpoints are declared| |...
把微信小程序异步API转化为Promise。用Promise处理异步操作有多方便,谁用谁知道。 微信官方没有给出Promise API来处理异步操作,而官方API异步的又非常多,这使得多异步编程会层层回调,代码一复杂,回调起来就想砸...
使用 Win32API 实现 Windows 下异步串口通讯 Win32API 是 Windows 操作系统下的一个应用程序接口(API),它提供了一些基本的函数和结构体,帮助开发者创建 Windows 应用程序。其中,使用 Win32API 可以实现 ...
柯林斯English Dictionary针对Node.js的异步API 安装 npm install collins 用法 var Collins = require ( 'collins' ) ; var serverName = 'api.collinsdictionary.com' ; var accessKey = 'your access key' ; ...