因此,我们通过ZMQ进行了客户端-服务器交互,并且陷入了体系结构争论中,无法找到适合我们需求的适当模式。我希望有智慧和经验的人可以帮助解决它。
这不是必需的,但我需要指出的是,ZMQ并不是直接使用的,它是通过库本身与C ++的Qt绑定,因此低级自定义是可能的,但不受欢迎(它们将大大增加实现工作)。
需要一些可靠,方便且健壮的API代理,该代理是通过 REQ <-> REP 实现的:状态,错误代码,加密等。加密是通过单独的授权SSL通道,为API提供了会话密钥,此处提到要强调的是,在ZMQ的套接字级别上尚未提供SSL(看起来过于复杂),存在“会话密钥”(每个客户端对称的加密密钥),它限制了模式解决方案。
因此,存在请求(客户端)+响应(服务器),它可以正常工作。但是我们最近满足了一些针对客户的通知机制的需求。假设当前的代理API提供了某些类型的数据:X,Y,Z(某物的列表)。客户端可以获取其中的任何一个,但是必须在 X,Y或Z发生任何更改时通知它,以便知道要执行新的请求。
很明显,客户端应该接收数据更新或存在此类更新的通知。这可能只是一个 PUB-SUB 问题,但似乎几乎不可能对该解决方案进行加密,或者至少需要授权意识(更不用说真正的“曲折”方式了)。
经过一番讨论,出现了两种观点,描述了两种不同的解决方法:
您会明智地做些什么?是否有任何已解决的解决方案或更好的解决方案?这里可能存在X-Y问题?也许某些东西被认为是解决诸如此类问题的常用方法?
在此先感谢任何聪明的主意。
答案 0 :(得分:1)
ZMQ_PAIR套接字主要用于线程之间的通信,因此,如果可能的话,我认为它们不是客户端/服务器设置的理想解决方案。
您可以使用ROUTER / DEALER而不是REQ / REP,因为它们不仅允许请求/答复,还允许其他模式。我认为更新版本的ZeroMQ提供了SERVER / CLIENT作为更好的选择,但我自己并未使用它们。
但是,我希望使用具有单独的PUB / SUB通道的解决方案,因为: