动态创建对等套接字 (ZeroMQ)

Dynamic creation of a peer-peer socket (ZeroMQ)

我的目的是在 C 中动态创建一些 ZeroMQ 套接字(点对点)。

我的服务器中有一个侦听套接字,当客户端发送一条消息时,我分配一个新端口并与该新端口建立连接,然后我 return 在我的侦听套接字上。

例如:

我应该使用什么类型的 ZeroMQ 函数?

我在考虑 FD 和 select,但可能与 ZeroMQ 或 zmq_poll() 不兼容,但我对此感到困惑。

我应该使用什么类型的 ZeroMQ 函数?

好吧,上面的场景肯定会使用 许多 函数来实现它,但是方法将取决于您决定使用哪个本机 API 版本,哪个取决于 remote-agents 的人口数量 let-in,我们假设最低水平为 2.1+。


服务器端很可能会使用所有这些:
- 版本 self-check:zmq_version()
- 上下文实例化:zmq_init()
- 上下文参数化:不存在于所有本机 API 版本中,检查 API 文档
- 套接字实例化:zmq_socket()
- 套接字设置:zmq_setsockopt()
- 基础设施元素 zmq_bind( { inproc://...| ipc://...| tcp://...:# | pgm://...:# | epgm://...:# | vmci://... } ) vmci:// transport-class 上的套接字 transport-class lock-in 不存在于所有本机 API-versions
- 消息资源和 state-management 操作 [ zmq_msg_init(), zmq_msg_copy(), ..., zmq_msg_close() ]
- 套接字 "reading",最佳 non-blocking,带有预 "sniffing" 轮询 zmq_recv() + zmq_poll()
- 插座 "sending",最佳 non-blocking zmq_send()
- 本地 "event"-loop 还检查 zmq_errno() 是否存在错误和 zmq_strerror() 使其更 human-readable
- 套接字资源释放:zmq_close()
- 上下文资源释放:zmq_term()


客户端很可能会使用所有这些:
- 版本 self-check:zmq_version()
- 上下文实例化:zmq_init()
- 上下文参数化:不存在于所有本机 API 版本中,检查 API 文档
- 套接字实例化:zmq_socket()
- 套接字设置:zmq_setsockopt()
- 套接字 transport-class 尝试 zmq_connect() 本地端使用相应的 transport-class 匹配参数 { inproc://...| ipc://...| tcp://...:# | pgm://...:# | epgm://...:# | vmci://... } ) vmci:// transport-class 不存在于所有原生 API-versions
- 消息资源和 state-management 操作 [ zmq_msg_init(), zmq_msg_copy(), ..., zmq_msg_close() ]
- 套接字 "reading",最佳 non-blocking,带有预 "sniffing" 轮询 zmq_recv() + zmq_poll()
- 插座 "sending",最佳 non-blocking zmq_send()
- 本地 "event"-loop 还检查 zmq_errno() 是否存在错误和 zmq_strerror() 使其更 human-readable
- 套接字资源释放:zmq_close()
- 上下文资源释放:zmq_term()


如果感到困惑,最好的下一步是:

最好的起点 - 如果确实愿意深入研究专业 's design is to understand a Zen-of-Zero, as lovely presented in Pieter HINTJENS' 书籍 "Code Connected, Volume 1"。读起来不容易,但值得花时间和精力开始。