Hiredis异步API
异步API Hiredis 拥有一个套异步API方便与一些事件库协同工作. Hiredis的代码中涵盖了hiredis与libev和libevent这两个库结合使用的例子. 连接 函数 redisAsyncConnect 用来建立到redis服务器的非阻塞连接. 返回一个 redisAsyncContext 结构体指针. 因为建立
异步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 the adapters/ directory for bindings to libev and libevent.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











빠른 적용: PHP의 실제 개발 사례 분석 여러 파일의 비동기 HTTP 다운로드 인터넷의 발전으로 파일 다운로드 기능은 많은 웹 사이트와 응용 프로그램의 기본 요구 사항 중 하나가 되었습니다. 여러 파일을 동시에 다운로드해야 하는 시나리오의 경우 기존 동기 다운로드 방법은 비효율적이고 시간이 많이 걸리는 경우가 많습니다. 이러한 이유로 PHP를 사용하여 HTTP를 통해 여러 파일을 비동기적으로 다운로드하는 것이 점점 더 일반적인 솔루션이 되었습니다. 본 글에서는 실제 개발 사례를 통해 PHP 비동기 HTTP를 활용하는 방법을 자세히 분석해 보겠습니다.

ReactAPI 호출 가이드: 백엔드 API와 상호 작용하고 데이터를 전송하는 방법 개요: 최신 웹 개발에서는 백엔드 API와 상호 작용하고 데이터를 전송하는 것이 일반적인 요구 사항입니다. 널리 사용되는 프런트엔드 프레임워크인 React는 이 프로세스를 단순화하는 몇 가지 강력한 도구와 기능을 제공합니다. 이 기사에서는 React를 사용하여 기본 GET 및 POST 요청을 포함하여 백엔드 API를 호출하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 필요한 종속성을 설치하십시오. 먼저 Axi가 프로젝트에 설치되어 있는지 확인하십시오.

Oracle은 세계적으로 유명한 데이터베이스 관리 시스템 제공업체이며, Oracle의 API(응용 프로그래밍 인터페이스)는 개발자가 Oracle 데이터베이스와 쉽게 상호 작용하고 통합하는 데 도움이 되는 강력한 도구입니다. 이 기사에서는 Oracle API 사용 가이드를 자세히 살펴보고 독자들에게 개발 프로세스 중에 데이터 인터페이스 기술을 활용하는 방법을 보여주고 구체적인 코드 예제를 제공합니다. 1.오라클

Oracle API 통합 전략 분석: 시스템 간의 원활한 통신을 위해서는 특정 코드 예제가 필요합니다. 오늘날 디지털 시대에 내부 기업 시스템은 서로 통신하고 데이터를 공유해야 하며 Oracle API는 원활한 통신을 돕는 중요한 도구 중 하나입니다. 시스템 간 통신. 이 기사에서는 OracleAPI의 기본 개념과 원칙부터 시작하여 API 통합 전략을 살펴보고 마지막으로 독자가 OracleAPI를 더 잘 이해하고 적용할 수 있도록 구체적인 코드 예제를 제공합니다. 1. 기본 오라클 API

제목: Laravel API 오류 보고 처리 방법, 구체적인 코드 예제가 필요합니다. Laravel을 개발하다 보면 API 오류가 자주 발생합니다. 이러한 오류는 프로그램 코드 논리 오류, 데이터베이스 쿼리 문제, 외부 API 요청 실패 등 다양한 이유로 인해 발생할 수 있습니다. 이러한 오류 보고서를 처리하는 방법은 핵심 문제입니다. 이 문서에서는 Laravel API 오류 보고서를 효과적으로 처리하는 방법을 보여주기 위해 특정 코드 예제를 사용합니다. 1. Laravel의 오류 처리

MongoDB를 사용하여 간단한 CRUD API를 개발하는 방법 현대 웹 애플리케이션 개발에서 CRUD(생성, 삭제, 수정, 확인) 작업은 가장 일반적이고 중요한 기능 중 하나입니다. 이 기사에서는 MongoDB 데이터베이스를 사용하여 간단한 CRUD API를 개발하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. MongoDB는 데이터를 문서 형식으로 저장하는 오픈 소스 NoSQL 데이터베이스입니다. 기존 관계형 데이터베이스와 달리 MongoDB에는 사전 정의된 스키마가 없습니다.

동시 및 비동기 프로그래밍 동시 프로그래밍은 동시에 실행되는 여러 작업을 처리하며, 비동기 프로그래밍은 작업이 스레드를 차단하지 않는 일종의 동시 프로그래밍입니다. asyncio는 프로그램이 메인 스레드를 차단하지 않고 I/O 작업을 수행할 수 있도록 하는 Python의 비동기 프로그래밍용 라이브러리입니다. 이벤트 루프 asyncio의 핵심은 I/O 이벤트를 모니터링하고 해당 작업을 예약하는 이벤트 루프입니다. 코루틴이 준비되면 이벤트 루프는 I/O 작업을 기다릴 때까지 이를 실행합니다. 그런 다음 코루틴을 일시 중지하고 다른 코루틴을 계속 실행합니다. 코루틴 코루틴은 실행을 일시 중지하고 다시 시작할 수 있는 함수입니다. asyncdef 키워드는 코루틴을 만드는 데 사용됩니다. 코루틴은 I/O 작업이 완료될 때까지 기다리기 위해 wait 키워드를 사용합니다. 다음과 같은 asyncio의 기본 사항

개발 제안: API 개발을 위해 ThinkPHP 프레임워크를 사용하는 방법 인터넷이 지속적으로 발전하면서 API(응용 프로그래밍 인터페이스)의 중요성이 점점 더 커지고 있습니다. API는 데이터 공유, 함수 호출 및 기타 작업을 실현할 수 있으며 개발자에게 비교적 간단하고 빠른 개발 방법을 제공합니다. 뛰어난 PHP 개발 프레임워크인 ThinkPHP 프레임워크는 효율적이고 확장 가능하며 사용하기 쉽습니다.
