代码之家  ›  专栏  ›  技术社区  ›  Panch

使用ZeroMQ加密数据的建议

  •  3
  • Panch  · 技术社区  · 7 年前

    我正在使用MQ进行练习,并使用开发了一个简单的发布者/订阅者 cppzmq 参考 zguide . 请找到下面相同的代码片段,我能够成功发布和订阅数据,内存占用也相当可观。由于这是分布式消息传递系统,我想在我的项目中使用它。

    出版商清洁石油产品

    int main (int argc, char * argv[]) {
    //  Prepare our context and publisher
    zmq::context_t context(1);
    zmq::socket_t publisher(context, ZMQ_PUB);
    
    std::string addr("tcp://*:");
    addr += ((argc > 1) ? std::string(argv[1]) : "5563");
    std::string tappend((argc > 2) ? std::string(argv[2]) : "");
    publisher.bind(addr.c_str());
    
    struct timeval timeofday;
    
    for(unsigned int idx = 0; idx < Total_Topics; ++idx)
    {
        Topics.emplace(std::make_pair(idx, std::string("temperature/celsius" + tappend + std::to_string(idx))));
    }
    
    std::this_thread::sleep_for (std::chrono::seconds(2));
    
    for(unsigned int NoOfTimes = 0; NoOfTimes < 20000; ++NoOfTimes)
    {
        for(unsigned int count = 0; count < Topics.size(); ++count)
        {
          {
             Quote quote = {};
             quote.ticker = "BHELL";
             gettimeofday(&timeofday,NULL);
             quote.timestampus = timeofday.tv_usec;
             quote.timestamps = timeofday.tv_sec;
    
             std::stringstream ss;
    
             quote.value *= 0.1;
             quote.data = std::to_string(NoOfTimes) + std::to_string(count);
    
             ss << quote;
    
             s_sendmore(publisher, Topics[count]);
             std::cout << "Publish "<< Topics[count] << std::endl;
             s_send(publisher, ss.str());
          }
        }
    
        std::this_thread::sleep_for (std::chrono::seconds(8));
        }
    
        return 0;
    }
    

    订阅人清洁石油产品

    int main (int argc, char * argv[]) {
    //  Prepare our context and subscriber
    zmq::context_t context(1);
    zmq::socket_t subscriber (context, ZMQ_SUB);
    
    std::string addr("tcp://localhost:");
    addr += ((argc > 1) ? std::string(argv[1]) : "5563");
    std::string tappend((argc > 2) ? std::string(argv[2]) : "");
    subscriber.connect(addr.c_str());
    
    struct timeval timeofday;
    
    std::string topic("");
    
    for(unsigned int idx = 0; idx < Total_Topics; ++idx)
    {
        topic = std::string("temperature/celsius" + tappend + std::to_string(idx));
        subscriber.setsockopt( ZMQ_SUBSCRIBE, topic.c_str(), topic.length());
    }
    
    while(1)
    {
        {
            Quote quote;
            std::stringstream ss;
    
            std::string address = s_recv (subscriber);
            std::cout<<"Msg Rcvd" << std::endl;
            std::cout<<"Topic: " << address << std::endl;
    
            std::string contents = s_recv (subscriber);
    
            ss << contents;
            ss >> quote;
    
            gettimeofday(&timeofday,NULL);
            std::cout << "us diff  "  << (timeofday.tv_usec - quote.timestampus) << std::endl;
            std::cout << "Sec diff "  << (timeofday.tv_sec - quote.timestamps) << std::endl;
        }
    }
        return 0;
    }
    

    现在我想知道zeroMQ应该使用哪种安全技术。我知道有 curveZMQ czmq . 但我不确定该用哪一种。任何人已经使用过这些库中的任何一个,或者您有任何其他用于ZeroMQ安全性的库。请告知。

    1 回复  |  直到 7 年前
        1
  •  -1
  •   Panch    7 年前

    在进一步研究zeroMQ加密之后,我发现 libcurve (C版)和 libzmq (C++版本)支持曲线安全性。默认情况下 libzmq 支持曲线和libcurve要求 libsodium czmq .

    要了解libcurve和libzmq曲线实现之间的区别,您可以通过讨论 here

    请查找libcurve的发布/订阅实现示例 here .