【问题标题】:Does ZeroMQ allow several server sockets?ZeroMQ 是否允许多个服务器套接字?
【发布时间】:2012-11-23 15:11:44
【问题描述】:
本机 C 套接字 API 在 accept() 上返回一个新的套接字描述符,该描述符绑定到某个远程套接字。这很好,因为我可以创建一个线程,传递套接字并建立一个点对点,或者更好地通过互联网建立一个线程对线程的连接。这正是我想要的:来自客户端的一个线程应该连接到服务器上的一个目标线程。因此,我不需要工作池或负载平衡,甚至不需要异步操作。服务器线程保存历史。 ZeroMQ 看起来很棒,但据我了解,它不会在接受时拆分套接字。
有没有办法用 ZerMQ 建立这种同步的线程到线程的连接?
【问题讨论】:
标签:
c++
networking
zeromq
【解决方案1】:
您问的是如何将特定解决方案(将套接字移交给线程)复制到更广泛的问题(如何编写可扩展的服务器)。
“每个套接字一个线程”设计仅适用于请求-回复的一种模式,例如HTTP。而真正大量的用例是用于数据分发(发布-订阅)或任务分发(管道)。都不适合一对一模型。
当你学习一个新工具时会问“这个工具如何做我的旧工具做的事情”是一个常见的错误,但你不会得到这样的好结果。相反,请花时间实际了解该工具的工作原理,然后利用这些知识重新思考您的问题并找到最佳解决方案。
【解决方案2】:
我以为 Zmq 会为你处理这个多重连接;我更喜欢通过在线程回调函数中处理连接来创建线程间通信,这意味着我的主 zmq 连接是在单独的线程中创建的;可以在线程内进行单独的连接控制。