zmq swap和HWM

时间:2012-07-19 16:11:51

标签: zeromq

来自DOC

  

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

一旦它回来[带有身份]或者开始表现良好,消息溢出到HWM的交换机是否会被发送给接收方?

1 个答案:

答案 0 :(得分:0)

来自DOC

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

因此,消息将被发送到接收器。我用

测试了它

PUSH Socket     

$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);
}

PULL Socket

<?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