ZeroMQ发送多对一

时间:2014-09-14 21:16:58

标签: c++ sockets process zeromq

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

服务器有时会出现故障,当它恢复时,客户端需要重新连接它。

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

因此,为了解决这个问题,我希望客户能够向服务器发送某种心跳声,嘿嘿,我在这里"在一个插座上。但是,我无法看到如何使用zmq。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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

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

所以我的建议是在尝试添加心跳之前先获得基本设计。 [实际上,我不确定心跳会如何帮助你解决当前的问题。]