C++ 我应该什么时候使用zmq_msg_t?
发送和接收消息的功能如下:C++ 我应该什么时候使用zmq_msg_t?,c++,zeromq,C++,Zeromq,发送和接收消息的功能如下: int zmq_send (void *socket, void *buf, size_t len, int flags); int zmq_recv (void *socket, void *buf, size_t len, int flags); 但是,从文档中不清楚何时必须直接使用zmq\u msg\u t或自定义数据。因此,在这种情况下,我应该考虑使用 ZMQJ.MSGYT< ,在这种情况下直接发送我的数据? 在如何设置、加载/卸载和使用/销毁支持的底层数据
int zmq_send (void *socket, void *buf, size_t len, int flags);
int zmq_recv (void *socket, void *buf, size_t len, int flags);
但是,从文档中不清楚何时必须直接使用zmq\u msg\u t
或自定义数据。因此,在这种情况下,我应该考虑使用<代码> ZMQJ.MSGYT< <代码>,在这种情况下直接发送我的数据?
在如何设置、加载/卸载和使用/销毁支持的底层数据结构方面要相当小心,这些底层数据结构是强大而酷的ZeroMQ
-库服务所依赖的
否则,最好使用高级伴随函数
Return value:
zmq_msg_close() function shall return zero if successful.
Otherwise it shall return -1 and
set errno to one of the values defined below.
Errors
EFAULT Invalid message.
毫不犹豫地读这本书——值得一读 Pieter HINTJENS在第42页第4项中建议: 要释放(而不是销毁)消息,请调用
zmq\u msg\u close()
。这会删除一个引用,最终0MQ将销毁该消息
在这方面,您可能会发现更为谨慎:
The zmq_msg_close() function shall inform the ØMQ infrastructure
that any resources associated with the message object
referenced by msg are no longer required and may be released.
Actual release of resources associated with the message object
shall be postponed by ØMQ until all users of the message or underlying
data buffer have indicated it is no longer required.
Applications should ensure that zmq_msg_close() is called
once a message is no longer required, otherwise memory leaks may occur.
切勿直接访问zmq\u msg\u t
成员,而应始终使用zmq\u msg
函数系列
Return value:
zmq_msg_close() function shall return zero if successful.
Otherwise it shall return -1 and
set errno to one of the values defined below.
Errors
EFAULT Invalid message.
这两个函数都将在内部构造一个
zmq\u msg\u t
,然后使用函数的zmq\u msg\u t
变体。这很方便,但如果您想多次发送同一消息,则创建zmq\u msg\u t
并使用这些变体将更高效(更少复制)。是的,如果对一次初始化的结构进行了大量重复使用,则有理由这样做。[+1对David]这很奇怪,因为如果我不使用zmq_msg_t
通过zmq_send
发送消息,那么在接收端点上我就不会得到zmq_msg_t
的内部数据结构。如果使用它,我在开始时会得到16字节的内部数据,这对我的接收应用程序来说是无用的。您试图发送的数据是如何格式化的?(什么数据类型等?)。