ZeroMQ发送多对一
ZeroMQ sending many to one
我已经在windows上使用推/拉实现了一个zmq库。有一台服务器和多达64个客户端通过环回运行。每个客户端都可以向服务器发送和接收。有一个线程等待每个客户端在pull-zmq套接字上进行连接。客户可以随时离开。
服务器有时会出现故障,当它重新启动时,客户端需要重新连接到它
问题是,当没有任何连接时,我有64个接收线程在等待连接。这在tcpview中显示为许多连接,我的同事告诉我,这看起来像是一种performance/d-dos类型的攻击。
因此,为了解决这个问题,我希望客户端在一个套接字上向服务器发送某种心跳"嘿,我在这里"。然而,我不知道如何使用zmq来实现这一点。
如有任何帮助,我们将不胜感激。
我认为服务器上有64个线程等待外部连接的基本设计是有缺陷的。为什么不让一个"主"线程绑定套接字,外部客户端将连接到该套接字?
在服务器内部,您仍然可以有64个工作线程。工作将由主线程分配给工作线程。主线程和工作线程之间的通信将通过inproc传输使用zmq消息。
我所描述的是zmq指南中介绍的简单的扇入和扇出模式。如果采用这种方法,客户端和工作程序中的大部分zmq代码将保持不变。您必须为主线程编写代码,但CZMQ的zproxy类可能对您很好(如果您使用的是CZMQ)。
因此,我的建议是,在尝试添加心跳之前,先做好基本设计。[实际上,我不确定心跳对你当前的问题有什么帮助。]
相关文章:
- STL算法函数在多个一维容器上的使用
- 给定一个枢轴点,按照它们与枢轴点构成的角度递增顺序对一组点进行排序
- 按第一个值的递减顺序对一组对进行排序,然后按第二个值的字母顺序排序
- C++ 如何对一串数字求平均值
- 多对多请求/结果模式的模式
- 带有多对括号的构造函数的含义
- 确保静态成员最多设置一次 (C++)
- 如何在对一组中的一对之间找到一个元素
- 在C++中对一组对象使用lower_bound()
- 在 QTableView 中仅对一列进行排序,而不对其他列进行排序.独立列
- 在字符串中替换多对字符
- 用C++智能指针构造多对多/双向引用
- 如何按距点的距离(x1,y1)升序对一组坐标进行排序
- C++,查找最低值,函数错误:循环最多运行一次(循环增量从未执行)
- 如何对一维FFT输出进行归一化
- C++循环最多运行一次
- 对一组数字进行排序的最快数据结构(和排序算法)是什么
- 矢量在C++对一种方法没有反应,但对其他方法很好
- 根据另一个数组的值对一个数组进行排序
- ZeroMQ发送多对一