ZeroMQ混合PUB / SUB DEALER / ROUTER模式

时间:2016-02-20 20:09:18

标签: sockets zeromq publish-subscribe inproc

我需要做以下事情:

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

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

更新

澄清我希望实现的目标。

  • 多个客户端可以与服务器通信
  • 客户端主要在请求 - 响应的基础上运行(在一个插槽上)
  • 客户端创建一个会话套接字,这意味着每当这个 创建套接字类型,需要创建单独的工作线程 从那时起,客户端就与这个工作线程进行通信 关于请求处理,例如服务器线程不能阻止 处理一个客户的请求时其他客户的连接
  • 但是,客户端可以接收来自工作线程的关于工作者心跳的临时消息。

UPDATE2

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

  • 明显地识别客户,因此使用ROUTER/DEALER,例如客户 确实是经销商,因此提供了异步处理
  • 客户端将消息发送到路由器所在的唯一本地端口
  • 路由器偷看消息(有点懒惰的盗版示例),检查新客户端是否进入;如果是的话,它将卸载到一个单独的线程,并将单独的线程与内部的" inproc: "连接起来。插座
  • 路由器显然会轮询前端和所有连接的客户端'后端发送和来回发送消息。

如果我将其与常规"进行比较,那么我的错误在于它是一种矫枉过正。套接字解决方案,我可以将客户端与工作线程直接连接(例如,工作线程可以直接从客户端打开的套接字中恢复),因此我可以完全省去路由。
我缺少什么?

1 个答案:

答案 0 :(得分:1)

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

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