hiredis发布/订阅示例
转:https://blog.csdn.net/sahusoft/article/details/9428347
代码:
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
#include <signal.h>
-
#include "hiredis.h"
-
#include "async.h"
-
#include "adapters/libevent.h"
-
void subCallback(redisAsyncContext *c, void *r, void *priv) {
-
redisReply *reply = r;
-
if (reply == NULL) return;
-
if ( reply->type == REDIS_REPLY_ARRAY && reply->elements == 3 ) {
-
if ( strcmp( reply->element[0]->str, "subscribe" ) != 0 ) {
-
printf( "Received[%s] channel %s: %s\n",
-
(char*)priv,
-
reply->element[1]->str,
-
reply->element[2]->str );
-
}
-
}
-
}
-
void connectCallback(const redisAsyncContext *c, int status) {
-
if (status != REDIS_OK) {
-
printf("Error: %s\n", c->errstr);
-
return;
-
}
-
printf("Connected...\n");
-
}
-
void disconnectCallback(const redisAsyncContext *c, int status) {
-
if (status != REDIS_OK) {
-
printf("Error: %s\n", c->errstr);
-
return;
-
}
-
printf("Disconnected...\n");
-
}
-
int main (int argc, char **argv) {
-
signal(SIGPIPE, SIG_IGN);
-
struct event_base *base = event_base_new();
-
redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379);
-
if (c->err) {
-
/* Let *c leak for now... */
-
printf("Error: %s\n", c->errstr);
-
return 1;
-
}
-
redisLibeventAttach(c,base);
-
redisAsyncSetConnectCallback(c,connectCallback);
-
redisAsyncSetDisconnectCallback(c,disconnectCallback);
-
redisAsyncCommand(c, subCallback, (char*) "sub", "SUBSCRIBE foo");
-
event_base_dispatch(base);
-
return 0;
-
}
编译:
gcc example-subpub.c libhiredis.a adapters/libevent.h -levent
测试:
订阅端
./a.out
发布端
./redis-cli PUBLISH foo bar