【问题标题】:ZeroMQ mixed PUB/SUB DEALER/ROUTER patternZeroMQ 混合 PUB/SUB DEALER/ROUTER 模式
【发布时间】:2016-06-02 09:21:24
【问题描述】:

我需要做以下事情:

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

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

更新

澄清我希望达到的目标。

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

更新2

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

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

让我感到困扰的是,如果我将其与“常规”套接字解决方案进行比较,我可以直接将客户端与工作线程连接起来(例如,工作线程可以从客户端打开的套接字直接接收) ),因此我可以完全放弃路由。
我错过了什么?

【问题讨论】:

  • 您的问题并没有明确说明您想要实现什么消息排序。 PUB/SUB 是一对多的,而不是从客户端发送到服务器的那种东西。 DEALER/ROUTER 用于在 REQ/REP 节点之间进行代理,而不是真正从服务器发送到客户端的那种东西。无论您真正想要实现什么,都可以使用 0MQ 来实现
  • 更新了原始问题,也许它可以帮助我真正想要实现的目标

标签: sockets zeromq publish-subscribe inproc


【解决方案1】:

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

讨论中还提到了 Malamute 及其代理,它本质上提供了一个基于 ZeroMQ 的框架,该框架还提供了您需要的功能。我没有时间亲自研究它,但它看起来很有希望。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多