ZeroMQ 混合 PUB/SUB DEALER/ROUTER 模式
ZeroMQ mixed PUB/SUB DEALER/ROUTER pattern
我需要做以下事情:
- 多个客户端连接到同一个远程端口
- 每个客户端打开2个不同的套接字,一个是
PUB/SUB
,
另一个是ROUTER/DEALER
(服务端偶尔可以回客户端心跳,不同服务端相关信息)。
不知道能不能在ZeroMQ中完成。
显然,如果我可以使用 2 个远程端口,那不是问题,但我失败了
了解我的设置是否可以通过某种信封实现
ZeroMQ 中的用法。
可以吗?
谢谢,
更新:
阐明我希望实现的目标。
- 多个客户端可以与服务器通信
- 客户端主要在请求-响应的基础上运行(在一个套接字上)
- 客户端创建一个会话套接字,这意味着每当这个
创建套接字类型,需要创建一个单独的工作线程
从那时起,客户端与这个工作线程进行通信
关于请求处理,例如服务器线程不得阻塞
处理一个客户端的请求时其他客户端的连接
- 但是,客户端偶尔会收到来自工作线程的有关工作线程心跳的消息。
更新2:
其实我可以解决的。我做了什么:
- 明显识别客户,所以使用
ROUTER/DEALER
,例如客户
确实是经销商,因此提供了异步处理
- 客户端将消息发送到路由器所在的唯一本地端口
- 路由器查看消息(有点像懒惰的海盗示例),检查是否有新客户端进来;如果是,它卸载到一个单独的线程,并将单独的线程连接到一个内部“
inproc:
”套接字
- 路由器显然会轮询前端和所有已连接客户端的后端并来回发送消息。
让我感到困扰的是,如果我将其与 "regular" 套接字解决方案进行比较,这是一种过大的杀伤力,在这种解决方案中,我可以直接将客户端与工作线程连接起来(例如,工作线程可以从打开的套接字中接收数据直接由客户端),因此我可以完全省去路由。
我错过了什么?
最近在 ZeroMQ 邮件列表上讨论了在一个 TCP 套接字上多路复用多个服务。提议的解决方案基本上就是您实施的。
讨论还提到了 Malamute 及其代理,它本质上提供了一个基于 ZeroMQ 的框架,该框架还提供了您需要的功能。我还没有时间亲自研究它,但它看起来很有希望。
我需要做以下事情:
- 多个客户端连接到同一个远程端口
- 每个客户端打开2个不同的套接字,一个是
PUB/SUB
, 另一个是ROUTER/DEALER
(服务端偶尔可以回客户端心跳,不同服务端相关信息)。
不知道能不能在ZeroMQ中完成。 显然,如果我可以使用 2 个远程端口,那不是问题,但我失败了 了解我的设置是否可以通过某种信封实现 ZeroMQ 中的用法。 可以吗? 谢谢,
更新:
阐明我希望实现的目标。
- 多个客户端可以与服务器通信
- 客户端主要在请求-响应的基础上运行(在一个套接字上)
- 客户端创建一个会话套接字,这意味着每当这个
创建套接字类型,需要创建一个单独的工作线程 从那时起,客户端与这个工作线程进行通信 关于请求处理,例如服务器线程不得阻塞 处理一个客户端的请求时其他客户端的连接 - 但是,客户端偶尔会收到来自工作线程的有关工作线程心跳的消息。
更新2:
其实我可以解决的。我做了什么:
- 明显识别客户,所以使用
ROUTER/DEALER
,例如客户 确实是经销商,因此提供了异步处理 - 客户端将消息发送到路由器所在的唯一本地端口
- 路由器查看消息(有点像懒惰的海盗示例),检查是否有新客户端进来;如果是,它卸载到一个单独的线程,并将单独的线程连接到一个内部“
inproc:
”套接字 - 路由器显然会轮询前端和所有已连接客户端的后端并来回发送消息。
让我感到困扰的是,如果我将其与 "regular" 套接字解决方案进行比较,这是一种过大的杀伤力,在这种解决方案中,我可以直接将客户端与工作线程连接起来(例如,工作线程可以从打开的套接字中接收数据直接由客户端),因此我可以完全省去路由。
我错过了什么?
最近在 ZeroMQ 邮件列表上讨论了在一个 TCP 套接字上多路复用多个服务。提议的解决方案基本上就是您实施的。
讨论还提到了 Malamute 及其代理,它本质上提供了一个基于 ZeroMQ 的框架,该框架还提供了您需要的功能。我还没有时间亲自研究它,但它看起来很有希望。