答案 0 :(得分:1)
如果确实要这样做,可以使用ZeroMQ工具设计一种介体。
ZeroMQ具有一组多层次的抽象,其中AccessPoint通常具有在它们彼此之间执行的某些“行为”(分布式行为)。
您指定的目标旨在不使用这种行为,而是要对数据流进行某种透明的(几乎)有线级别的处理。
为此,我首先将您的注意力吸引到以下概念:
-ZeroMQ Hierarchy in Less than Five Seconds
并且在可能的工具旁边,该工具可以切实帮助完成给定任务:
- ZMQ_STREAM
可扩展的正式通信原型(用于AccessPoint)
使用
ZMQ_STREAM
传输时,类型tcp://
的套接字用于从非ØMQ对等方发送和接收TCP数据。ZMQ_STREAM
套接字可以充当客户端和/或服务器,异步发送和/或接收TCP数据。
当接收到TCP数据时,ZMQ_STREAM
套接字在将消息传递给应用程序之前,应在消息部分之前包含消息的始发对等方的身份。所接收的消息在所有连接的同级之间公平排队。
发送TCP数据时,ZMQ_STREAM
套接字应删除消息的第一部分,并使用它来确定消息应路由到的对等方的身份,并且不可路由的消息将导致EHOSTUNREACH
或{ {1}}错误。
要打开与服务器的连接,请使用EAGAIN
调用,然后使用zmq_connect
调用获取套接字标识。
要关闭特定连接,请发送标识帧,然后发送零长度消息(请参见示例部分)。
建立连接后,应用程序将收到零长度的消息。同样,当对等方断开连接(或连接断开)时,应用程序将收到零长度的消息。
您必须先发送一个标识帧,然后发送一个数据帧。ZMQ_IDENTITY zmq_getsockopt
标志对于身份帧是必需的,但在数据帧中将被忽略。
示例:
ZMQ_SNDMORE