ZMQ设置setsockopt选项

参考文章:感谢作者郝峰波 的翻译!作者个人网站:http://www.fengbohello.top/ 

setsocketopt选项目录:https://www.cnblogs.com/fengbohello/p/4398953.html

总目录:https://www.cnblogs.com/fengbohello/p/4230135.html

官方说明文档:http://api.zeromq.org

参考文章:

http://www.cppblog.com/killsound/archive/2009/01/16/72138.html

Name

zmq_setsockopt –设置ZMQ socket的属性

Synopsis

int zmq_setsockopt (void *socket, int option_name, const void *option_value, size_t option_len);
  1. 注意:除了以下属性,所有的属性均需要在对socket进行bind/connect操作之前设置:
  2. ZMQ_SUBSCRIBE, ZMQ_UNSUBSCRIBE, ZMQ_LINGER, ZMQ_ROUTER_HANDOVER,
  3. ZMQ_ROUTER_MANDATORY, ZMQ_PROBE_ROUTER, ZMQ_XPUB_VERBOSE, ZMQ_REQ_CORRELATE, and ZMQ_REQ_RELAXED
  4. 特别的,安全的属性也可以在bind/connect操作之后生效,并且可以随时进行修改并影响之后的bind/connect操作。

Description

zmq_setsockopt()函数会对socket参数指定的socket进行设置,设置的属性由option_name参数指定,属性值由参数option_value指定。option_len参数指定属性值的数据存储空间的大小。

以下的socket属性可以通过zmq_setsockopt()函数进行设置:

  • ZMQ_SNDHWM:对向外发送的消息设置高水位(最大缓存量)

ZMQ_SNDHWM属性将会设置socket参数指定的socket对外发送的消息的高水位。高水位是一个硬限制,它会限制每一个与此socket相连的在内存中排队的未处理的消息数目的最大值。0值代表着没有限制

如果已经到达了规定的限制,socket就需要进入一种异常的状态,表现形式因socket类型而异socket会进行适当的调节,比如阻塞或者丢弃已发送的消息。请从zmq_socket(3)函数中查看更多细节,获取每种类型的socket的精确的行为。

ZMQ不能保证可以接收像ZMQ_SNDHWM参数一样多的消息,实际的限制可能在60~70%以下,这取决于这个socket上的消息流。

属性值的类型

int

属性值的单位

消息

默认值

1000

可以应用的socket类型

所有类型

  • ZMQ_LINGER:为socket关闭设置停留时间

ZMQ_LINGER属性会给指定的socket设定关闭前的停留时间。停留时间指定了在对一个socket调用zmq_close(3)函数之后,这个socekt上即将被发送但还没有被发送到对端的消息在内存中继续停留的时间。这个属性进而还会影响到与这个scoket相关联的context上zmq_term(3)操作的进行终结的结果。

简单说就是在socket在低啊用close()或者term()之后,尚未发送的信息被保留多久。

这是指消息被没有及时处理,被堆积在内存中的情况而言的

下面简述了不同的行为:

  • 属性值 -1:表示无限的停留时间。还没被发送的消息在socket调用zmq_close()操作之后不会被丢弃;试图使用zmq_term()操作对context进行终结的操作会被阻塞,直到所有没有被发送的消息被发往对端为止。
  • 属性值0: 表示没有停留时间。当使用zmq_close()函数将socket关闭的时候,所有没有被发送呃消息都会被丢弃。
  • 属性是正数值表示设置一个毫秒为单位的停留时间。在第socket调用zmq_close()操作后,还没有发送的消息不会被丢弃;试图使用zmq_term()对于此scoket相关联的context进行终结的时候会被阻塞,直到所有未被发送的消息都被发往对端;或者停留时间已经到达,此时所有未发送的消息都会被丢弃。

属性值的类型

int

属性值的单位

毫秒

默认值

-1

可以应用的socket类型

所有类型

  • ZMQ_RCVTIMEO:在一个recv操作返回EAGAIN错误前的最大时间

设置socket的接收操作超时时间。如果属性值是0,zmq_recv(3)函数将会立刻返回,如果没有接收到任何消息,将会返回EAGAIN错误。如果属性值是 -1,将会阻塞,直到接收到消息为止。对于任何其它值,都会进行等待这么多时间,直到返回EAGAIN错误。

属性值的类型

int

属性值的单位

毫秒

默认值

-1(无限等待)

可以应用的socket类型

所有类型

ZMQ_SNDTIMEO:在一个发送操作返回EAGAIN之前等待的最大时间

设置指定socket的发送超时。如果属性值是0,zmq_send(3)函数会立即返回,如果无法发送此消息,则返回EAGAIN错误值。如果属性值是 -1,那么在消息发送之前会进入阻塞模式。对于所有其它的值,将会在超时时间内进行尝试发送消息,超时后返回EAGAIN错误。

属性值的类型

int

属性值的单位

毫秒

默认值

-1(无限等待)

可以应用的socket类型

所有类型

更多选项请参照:http://www.cnblogs.com/fengbohello/p/4398953.html

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq-setsockopt

发布了49 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/auspark/article/details/103070320
zmq