Redis と C++ を使用してパブリッシュ/サブスクライブ関数を開発する方法

王林
リリース: 2023-09-21 15:35:32
オリジナル
958 人が閲覧しました

Redis と C++ を使用してパブリッシュ/サブスクライブ関数を開発する方法

Redis と C を使用してパブリッシュ/サブスクライブ機能を開発する方法

大規模なリアルタイム システムを開発する場合、パブリッシュ/サブスクライブ モデルはメッセージングで広く使用されます。イベント駆動型メカニズムが中間です。 Redis は、パブリッシュ/サブスクライブ機能を介してリアルタイム通信とデータ転送を簡単に実現できる、高性能のキーバリュー ストレージ システムです。この記事では、Redis と C を使用してパブリッシュ/サブスクライブ関数を開発する方法を紹介し、具体的なコード例を示します。

  1. Redis のパブリッシュ/サブスクライブ モデルの概要
    Redis のパブリッシュ/サブスクライブ モデルは、複数のサブスクライバーが同時に同じメッセージを受信できるようにするメッセージ パッシング ベースのモデルです。このパターンでは、パブリッシャーはメッセージの送信を担当し、サブスクライバーはチャネルに登録することでメッセージを受信します。
  2. Redis パブリッシュ/サブスクライブ機能の実装
    Redis パブリッシュ/サブスクライブ機能を使用するには、まず Redis サーバーをインストールして構成する必要があります。次に、Redis の C クライアント ライブラリを使用して 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 関数を使用してメッセージを公開します。

  1. まとめ
    RedisとCのパブリッシュ・サブスクライブ機能を利用することで、簡単にリアルタイム通信やデータ転送を実現できます。この記事では、Redis のパブリッシュ/サブスクライブ モデルを活用する方法を説明し、C コードの例を示します。この記事での紹介が、実際の開発において Redis と C を使用してパブリッシュ/サブスクライブ機能を開発する際の参考になれば幸いです。

以上がRedis と C++ を使用してパブリッシュ/サブスクライブ関数を開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!