ZeroMQ发送多对一

ZeroMQ sending many to one

本文关键字:多对一 ZeroMQ      更新时间:2023-10-16

我已经在windows上使用推/拉实现了一个zmq库。有一台服务器和多达64个客户端通过环回运行。每个客户端都可以向服务器发送和接收。有一个线程等待每个客户端在pull-zmq套接字上进行连接。客户可以随时离开。

服务器有时会出现故障,当它重新启动时,客户端需要重新连接到它

问题是,当没有任何连接时,我有64个接收线程在等待连接。这在tcpview中显示为许多连接,我的同事告诉我,这看起来像是一种performance/d-dos类型的攻击。

因此,为了解决这个问题,我希望客户端在一个套接字上向服务器发送某种心跳"嘿,我在这里"。然而,我不知道如何使用zmq来实现这一点。

如有任何帮助,我们将不胜感激。

我认为服务器上有64个线程等待外部连接的基本设计是有缺陷的。为什么不让一个"主"线程绑定套接字,外部客户端将连接到该套接字?

在服务器内部,您仍然可以有64个工作线程。工作将由主线程分配给工作线程。主线程和工作线程之间的通信将通过inproc传输使用zmq消息。

我所描述的是zmq指南中介绍的简单的扇入和扇出模式。如果采用这种方法,客户端和工作程序中的大部分zmq代码将保持不变。您必须为主线程编写代码,但CZMQ的zproxy类可能对您很好(如果您使用的是CZMQ)。

因此,我的建议是,在尝试添加心跳之前,先做好基本设计。[实际上,我不确定心跳对你当前的问题有什么帮助。]