Redis と C を使用してパブリッシュ/サブスクライブ機能を開発する方法
大規模なリアルタイム システムを開発する場合、パブリッシュ/サブスクライブ モデルはメッセージングで広く使用されます。イベント駆動型メカニズムが中間です。 Redis は、パブリッシュ/サブスクライブ機能を介してリアルタイム通信とデータ転送を簡単に実現できる、高性能のキーバリュー ストレージ システムです。この記事では、Redis と C を使用してパブリッシュ/サブスクライブ関数を開発する方法を紹介し、具体的なコード例を示します。
次は、Redis C クライアント ライブラリを使用してパブリッシュ/サブスクライブ機能を実装する方法を示す基本的な例です。
#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; }
上記のコードでは、Redis の C クライアント ライブラリ hiiris を使用して Redis サーバーに接続します。異なるスレッドを作成することで、パブリッシュ機能とサブスクライブ機能を個別に実装できます。サブスクリプション スレッドでは、redisCommand 関数を使用して指定されたチャネルにサブスクライブし、redisGetReply 関数を通じてメッセージを受信します。公開スレッドでは、redisCommand 関数を使用してメッセージを公開します。
以上がRedis と C++ を使用してパブリッシュ/サブスクライブ関数を開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。