Comment utiliser Redis et C++ pour développer une fonctionnalité de publication-abonnement
Lors du développement de systèmes en temps réel à grande échelle, le modèle de publication-abonnement est largement utilisé dans la messagerie et les mécanismes pilotés par événements. Redis est un système de stockage clé-valeur hautes performances qui facilite la communication et le transfert de données en temps réel grâce à la fonction de publication-abonnement qu'il fournit. Cet article explique comment utiliser Redis et C++ pour développer des fonctions de publication-abonnement et fournit des exemples de code spécifiques.
Ce qui suit est un exemple de base qui montre comment utiliser la bibliothèque client Redis C++ pour implémenter la fonctionnalité de publication-abonnement.
#include <iostream> #include <string> #include <thread> #include <hiredis/hiredis.h> void subscribeThread() { // 创建Redis上下文 redisContext* context = redisConnect("127.0.0.1", 6379); if (context == NULL || context->err) { if (context) { std::cout << "Error: " << context->errstr << std::endl; redisFree(context); } else { std::cout << "Error: 连接Redis服务器失败!" << std::endl; } return; } // 订阅频道 redisReply* reply = static_cast<redisReply*>( redisCommand(context, "SUBSCRIBE mychannel")); if (reply == NULL || reply->type == REDIS_REPLY_ERROR) { std::cout << "Error: 订阅频道失败!" << std::endl; freeReplyObject(reply); redisFree(context); return; } // 循环接收消息 while (true) { redisReply* r = nullptr; int status = redisGetReply(context, (void**)&r); if (status == REDIS_ERR) { std::cout << "Error: 接收消息失败!" << std::endl; break; } if (r->type == REDIS_REPLY_ARRAY && r->elements == 3) { if (strcmp(r->element[0]->str, "message") == 0) { std::cout << "接收到消息: " << r->element[2]->str << std::endl; } } freeReplyObject(r); } // 释放资源 freeReplyObject(reply); redisFree(context); } void publishThread() { redisContext* context = redisConnect("127.0.0.1", 6379); if (context == NULL || context->err) { if (context) { std::cout << "Error: " << context->errstr << std::endl; redisFree(context); } else { std::cout << "Error: 连接Redis服务器失败!" << std::endl; } return; } // 发布消息 while (true) { std::string message; std::cout << "请输入要发布的消息(输入q退出):"; std::getline(std::cin, message); if (message == "q") { break; } redisReply* reply = static_cast<redisReply*>( redisCommand(context, "PUBLISH mychannel %s", message.c_str())); if (reply == NULL || reply->type == REDIS_REPLY_ERROR) { std::cout << "Error: 发布消息失败!" << std::endl; } freeReplyObject(reply); } // 释放资源 redisFree(context); } int main() { std::thread subThread(subscribeThread); std::thread pubThread(publishThread); subThread.join(); pubThread.join(); return 0; }
Dans le code ci-dessus, nous utilisons la bibliothèque client C++ de Redis Hiredis pour nous connecter au serveur Redis. En créant différents fils de discussion, les fonctions de publication et d'abonnement peuvent être implémentées séparément. Dans le fil d'abonnement, nous utilisons la fonction redisCommand pour nous abonner au canal spécifié et recevoir des messages via la fonction redisGetReply. Dans le fil de publication, nous utilisons la fonction redisCommand pour publier des messages.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!