ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html
本文地址 :http://www.cnblogs.com/fengbohello/p/4398953.html
翻译:郝峰波
mail : [email protected]
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_setsockopt
zmq_setsockopt(3) ØMQ Manual - ØMQ/4.1.0
Name
zmq_setsockopt –设置ZMQ socket的属性
Synopsis
int zmq_setsockopt (void *socket, int option_name, const void *option_value, size_t option_len);
注意:除了以下属性,所有的属性均需要在对socket进行bind/connect操作之前设置:
ZMQ_SUBSCRIBE, ZMQ_UNSUBSCRIBE, ZMQ_LINGER, ZMQ_ROUTER_HANDOVER,
ZMQ_ROUTER_MANDATORY, ZMQ_PROBE_ROUTER, ZMQ_XPUB_VERBOSE, ZMQ_REQ_CORRELATE, and ZMQ_REQ_RELAXED
特别的,安全的属性也可以在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_RCVHWM:对进入socket的消息设置高水位
ZMQ_RCVHWM属性将会设置socket参数指定的socket进入的消息的高水位。高水位是一个硬限制,它会限制每一个与此socket相连的在内存中排队的未处理的消息数目的最大值。0值代表着没有限制。
如果已经到达了规定的限制,socket就需要进入一种异常的状态,表现形式因socket类型而异。socket会进行适当的调节,比如阻塞或者丢弃被发送的消息。请从zmq_socket(3)函数中查看更多细节,获取每种类型的socket的精确的行为。
属性值的类型 |
int |
属性值的单位 |
消息 |
默认值 |
1000 |
可以应用的socket类型 |
所有类型 |
ZMQ_AFFINITY:设置I/O线程关联
ZMQ_AFFINITY属性会对socket参数指定的socket新创建的链接设置I/O线程关联。
关联指明了和scoket相关的context上的哪个线程池中的哪个线程来处理新创建的链接。0值表示没有关联,这意味着工作将在线程池中平等的向所有进程进行分发。对于非0值,最低位对应线程1,第二低位对应线程2,等等。比如,设置的值是3的话,说明socket上这之后的链接请求将被I/P线程1和2处理。
请参见zmq_init(3)函数了解更多关于对I/O线程分配的细节。
属性值的类型 |
uint64_t |
属性值的单位 |
N/A (bitmap) |
默认值 |
0 |
可以应用的socket类型 |
N/A |
ZMQ_SUBSCRIBE:创建消息过滤标志
ZMQ_SUBSCRIBE属性将会在ZMQ_SUB类型的socekt上创建一个新的消息过滤标志。新建立的ZMQ_SUB类型socket会对进入socket的所有消息进行过滤,这样你就可以使用这个属性来建立最初的消息过滤项。
一个option_value的长度是0的过滤属性会订阅所有的广播消息。一个非空的option_value值会只订阅所有以option_value的值为前缀的消息。一个ZMQ_SUB类型的socket可以附加多个过滤条件,只要一个消息符合过滤条件中的任何一个就会被接受。
属性值的类型 |
二进制数据 |
属性值的单位 |
N/A |
默认值 |
N/A |
可以应用的socket类型 |
ZMQ_SUB |
ZMQ_UNSUBSCRIBE:移除消息过滤选项
ZMQ_UNSUBSCRIBE选项会移除一个ZMQ_SUB类型中已经存在的消息过滤项。需要被移除的过滤选项必须是已经使用ZMQ_SUBSCRIBE选项建立了的。如果添加了几个相同的过滤项,ZMQ_UNSUBSCRIBE选项只会移除其中的一个,其它的可以继续使用。
属性值的类型 |
二进制数据 |
属性值的单位 |
N/A |
默认值 |
N/A |
可以应用的socket类型 |
ZMQ_SUB |
ZMQ_IDENTITY:设置socket 身份ID
ZMQ_IDENTITY选项会设置socket的身份ID。socket的身份ID只会能在请求/回复模式中使用。也就是说,可以使用ROUTER类型的socket进行socket串联,根据给定的身份ID可以对消息进行路由。
身份ID至少有1 B的长度,最多有255 B的长度。以0位开始的身份ID由ZMQ保留使用。
如果两个socket使用相同的身份ID向第三方进行连接,后果是不确定的。
属性值的类型 |
二进制数据 |
属性值的单位 |
N/A |
默认值 |
NULL |
可以应用的socket类型 |
ZMQ_REQ, ZMQ_REP, ZMQ_ROUTER, ZMQ_DEALER |
ZMQ_RATE:设置广播数据的频率
ZMQ_RATE属性会对socket的接收和发送广播(比如zmq_pgm())的频率最大值进行设置。
属性值的类型 |
int |
属性值的单位 |
千比特/秒 |
默认值 |
100 |
可以应用的socket类型 |
使用多路广播时,对所有socket类型都可用 |
<