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

时间:2018-03-22 10:41:59

标签: sockets zeromq

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

我的服务器中有一个监听套接字,当客户端发送消息时,我将一个新端口归属并使用这个新端口建立连接,然后返回我的监听套接字。

前:

  • 服务器侦听端口8500
  • 客户端1向8500
  • 发送消息
  • 服务器发送新端口号8510
  • 服务器和客户端在端口8510上创建连接 (客户端断开端口8500上的连接)
  • 服务器侦听其他连接
  • 客户端2向8500
  • 发送消息
  • 服务器发送新的端口号8511 ...

我应该使用什么类型的ZeroMQ功能?

我在考虑FD并选择但可能与ZeroMQ或zmq_poll()不兼容,但它在我的脑海中让人感到困惑。

1 个答案:

答案 0 :(得分:0)

我应该使用什么类型的ZeroMQ功能?

嗯,上面的场景肯定会使用很多函数来实现这一点,但这种方法将取决于您决定使用哪个本机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}}

如上所述混淆的最佳下一步:

最好的起点 - 如果确实愿意深入了解专业的设计,那就是理解一个零度的禅,就像Pieter HINTJENS的书“Code Connected,Volume 1”中所展示的那样可爱。 。这不是一个简单的阅读,但值得花时间和努力开始。