我需要执行以下操作:
- 多个客户端连接到同一个远程端口
- 每个客户端打开 2 个不同的套接字,一个是 a
PUB/SUB
,另一个是 aROUTER/DEALER
(服务器偶尔会向客户端发送心跳,不同的服务器相关信息)。
无论是否可以在 ZeroMQ 中完成,我都完全迷失了。显然,如果我可以使用 2 个远程端口,那不是问题,但我不明白我的设置是否可以通过 ZeroMQ 中的某种信封使用来实现。可以做到吗?谢谢,
更新:
澄清我希望达到的目标。
- 多个客户端可以与服务器通信
- 客户端主要在请求-响应的基础上操作(在一个套接字上)
- 客户端创建一个会话套接字,这意味着无论何时创建这种
类型的套接字,都需要创建一个单独的工作线程,并且从那时起客户端就请求处理与该工作线程进行通信,例如服务器线程不能阻塞处理一个客户端的请求时连接其他客户端 - 但是,客户端可以偶尔从工作线程接收有关工作人员心跳的消息。
更新2:
其实我可以解决的。我做了什么:
- 明显识别客户,因此
ROUTER/DEALER
使用,例如客户确实是经销商,因此提供异步处理 - 客户端将消息发送到路由器所在的唯一本地端口
- 路由器窥视消息(有点像懒惰的海盗示例),检查是否有新客户端进来;如果是,它将卸载到单独的线程,并将单独的线程与内部“
inproc:
”套接字连接 - 路由器显然会轮询前端和所有连接的客户端的后端并来回发送消息。
让我感到困扰的是,如果我将其与“常规”套接字解决方案进行比较,那就太矫枉过正了,我可以直接将客户端与工作线程连接起来(例如,工作线程可以直接从客户端打开的套接字接收),因此我可以完全放弃路由。
我错过了什么?