首页 文章

ZeroMQ混合PUB / SUB DEALER / ROUTER模式

提问于
浏览
2

我需要做以下事情:

  • 多个客户端连接到SAME远程端口

  • 每个客户端打开2个不同的套接字,一个是 PUB/SUB ,另一个是 ROUTER/DEALER (服务器偶尔可以发送回客户端心跳,不同的服务器相关信息) .

无论是否可以在ZeroMQ中完成,我都完全迷失了 . 显然,如果我可以使用2个远程端口,这不是问题,但我无法理解我的设置是否可以通过ZeroMQ中的某种信封使用来实现 . 可以吗?谢谢,

Update

澄清我希望实现的目标 .

  • 多个客户端可以与服务器通信

  • 客户端主要在请求 - 响应的基础上运行(在一个插槽上)

  • 客户端创建会话套接字,这意味着每当这个
    创建了套接字类型,需要创建一个单独的工作线程,并且从那时起客户端就此请求处理与该工作线程进行通信,例如,在处理一个客户端的请求时,服务器线程不得阻止其他客户端的连接

  • 但是,客户端可以接收来自工作线程的关于工作者心跳的临时消息 .

Update2

其实我可以解决它 . 我做了什么:

  • 显然识别客户端,因此使用 ROUTER/DEALER ,例如客户确实是经销商,因此提供异步处理

  • 客户端将消息发送到路由器所在的唯一本地端口

  • 路由器窥视消息(有点懒惰的盗版示例),检查新客户端是否进入;如果是,则卸载到单独的线程,并将单独的线程与内部“ inproc: ”套接字连接

  • 路由器显然轮询前端和所有连接客户端的后端并来回发送消息 .

让我感到困惑的是,如果我将它与"regular"套接字解决方案进行比较是一种过度杀伤,我可以将客户端与工作线程直接连接(例如,工作线程可以直接从客户端打开的套接字中恢复),因此我可以完全放弃路由 .
What am I missing?

1 回答

  • 1

    最近讨论了关于在一个TCP套接字上多路复用多个服务的ZeroMQ邮件列表 . 建议的解决方案基本上就是您实施的 .

    讨论中还提到了Malamute及其经纪人,它基本上提供了一个基于ZeroMQ的框架,该框架还提供了您所需的功能 . 我自己没有时间去研究它,但看起来很有希望 .

相关问题