我的目的是在C中动态创建一些ZeroMQ套接字(peer-peer)。
我的服务器中有一个监听套接字,当客户端发送消息时,我将一个新端口归属并使用这个新端口建立连接,然后返回我的监听套接字。
前:
我应该使用什么类型的ZeroMQ功能?
我在考虑FD并选择但可能与ZeroMQ或zmq_poll()
不兼容,但它在我的脑海中让人感到困惑。
答案 0 :(得分:0)
嗯,上面的场景肯定会使用很多函数来实现这一点,但这种方法将取决于您决定使用哪个本机API版本,这取决于远程代理的数量。你喜欢让我们假设最低等级为2.1 +。
服务器端很可能会使用所有这些:
- 版本自检:zmq_version()
- 上下文实例化:zmq_init()
- 上下文参数化:不存在于所有本机API版本中,请检查API文档
- 套接字实例化:zmq_socket()
- 套接字设置:zmq_setsockopt()
- 基础架构元素zmq_bind( { inproc://...| ipc://...| tcp://...:# | pgm://...:# | epgm://...:# | vmci://... } )
上的套接字传输类锁定所有本机API版本中不存在 vmci://
transport-class
- 消息资源和状态管理操作[ zmq_msg_init(), zmq_msg_copy(), ..., zmq_msg_close() ]
- 套接字“阅读”,最佳无阻塞,预先“嗅探”投票zmq_recv()
+ zmq_poll()
- 套接字“发送”,最佳非阻塞zmq_send()
- 本地“事件”-loop,同时检查zmq_errno()
是否存在错误,zmq_strerror()
使其更具人性化可读性
- 套接字资源释放:zmq_close()
- 上下文资源发布:zmq_term()
客户端很可能会使用以下所有这些:
- 版本自检:zmq_version()
- 上下文实例化:zmq_init()
- 上下文参数化:不存在于所有本机API版本中,请检查API文档
- 套接字实例化:zmq_socket()
- 套接字设置:zmq_setsockopt()
- 使用相应的传输类匹配参数zmq_connect()
{ inproc://...| ipc://...| tcp://...:# | pgm://...:# | epgm://...:# | vmci://... } )
传输类不存在的传输类匹配参数vmci://
本地端到[ zmq_msg_init(), zmq_msg_copy(), ..., zmq_msg_close() ]
本地端的套接字传输类尝试原生API版本
- 消息资源和状态管理操作zmq_recv()
- 套接字“阅读”,最佳无阻塞,预先“嗅探”投票zmq_poll()
+ zmq_send()
- 套接字“发送”,最佳非阻塞zmq_errno()
- 本地“事件”-loop,同时检查zmq_strerror()
是否存在错误,zmq_close()
使其更具人性化可读性
- 套接字资源释放:zmq_term()
- 上下文资源发布:{{1}}
最好的起点 - 如果确实愿意深入了解专业distributed-system的设计,那就是理解一个零度的禅,就像Pieter HINTJENS的书“Code Connected,Volume 1”中所展示的那样可爱。 。这不是一个简单的阅读,但值得花时间和努力开始。