【发布时间】: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