2

我需要执行以下操作:

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

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

更新

澄清我希望达到的目标。

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

更新2

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

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

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

4

1 回答 1

1

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

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

于 2016-02-21T17:31:07.087 回答