【问题标题】:zmq swap and HWMzmq 交换和 HWM
【发布时间】:2012-07-19 16:11:51
【问题描述】:

来自文档

ØMQ 提供了一种叫做“swap”的东西,它是一个磁盘文件, 保存我们无法存储到队列中的消息

在 HWM 达到的情况下溢出到交换的消息是否会在接收器返回 [带有身份] 或开始表现良好时发送到接收器?

【问题讨论】:

    标签: zeromq


    【解决方案1】:

    来自DOC

    ZMQ_SWAP 选项应设置指定套接字的磁盘卸载(交换)大小。将 ZMQ_SWAP 设置为非零值的套接字可能会超过其高水位线;在这种情况下,未完成的消息应卸载到磁盘上的存储而不是保存在内存中

    因此,消息将发送给接收者。我用

    测试了它

    PUSH 套接字

    $sender = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
    $sender->setSockOpt(ZMQ::SOCKOPT_HWM, 1);
    $sender->setSockOpt(ZMQ::SOCKOPT_SWAP, 1000);
    $sender->connect("tcp://127.0.0.1:9090");
    
    for ($i = 0; $i < 1000; $i++) {
         $sender->send($i);
        echo "message sent";
        usleep(100);
    }
    

    拉式插座

    <?php
    $context = new ZMQContext();
    
    $receiver = new ZMQSocket($context, ZMQ::SOCKET_PULL);
    $receiver->setSockOpt(ZMQ::SOCKOPT_HWM, 25000);
    $receiver->setSockOpt(ZMQ::SOCKOPT_SWAP, 25000);
    $receiver->bind("tcp://127.0.0.1:9090");
    $i = 0;
    while (1) {
         $msg = $receiver->recv();
         echo "$i $msg \n";
         $i++;
    }
    

    通过先启动 PUSH 套接字而不使用 PULLer

    【讨论】:

    • 来自文档:ZMQ_SWAP 选项已被删除。症状:在 ZMQ_SWAP 上编译失败。解决方案:重新设计任何使用此功能的代码。
    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 2020-08-03
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多