Я работал с hiredis
в качестве клиента, все, например, set
, publish
и т. Д., Кроме subscribe
. Я могу подписаться, но не могу получить сообщение, когда пытаюсь опубликовать на канале, на который я подписан. Вот код, который я использую:
int main() {
signal(SIGPIPE, sigHandler);
struct event_base *base = event_base_new();
assert(base != nullptr);
auto redis = redisAsyncConnect(IP, PORT);
if (redis != nullptr && redis->err) {
std::cerr << redis->err;
delete redis;
exit(1);
}
std::cout << "Connected" << END;
int flag;
std::cout << "Calling redisLibeventAttach" << END;
redisLibeventAttach(redis, base);
flag = redisAsyncCommand(redis, onMessage, (char *) "sub", "SUBSCRIBE test");
std::cout << "Command ret: " << flag << END;
flag = event_base_dispatch(base);
std::cout << " Event base flag " << flag << END;
return 0;
}
И функция включения сообщения:
void onMessage(redisAsyncContext *context, void *r, void *data) {
assert(r != nullptr);
auto *reply = static_cast<redisReply *>(r);
assert(reply != nullptr);
std::cout << "Reply " << reply->type << END;
switch (reply->type) {
case REDIS_REPLY_ARRAY:
for (int i = 0; i < reply->elements; ++i) {
std::cout << i << " -- " << reply->element[i]->str << END;
}
break;
case REDIS_REPLY_STRING:
std::cout << reply->str << END;
break;
}
}
Есть ли что-нибудь еще, что я должен сделать?