我正在编写一个从多个客户端接收数据的网络应用程序:当收到一个数据包时,应用程序读取并修改 header ,然后将数据包转发给一个或多个客户端。我想为与客户端的每个连接使用一个输出队列,因此应用程序能够监视每个输出队列的填充水平并检测每个客户端上的负载。
传入数据包的路由可以由单个线程实现,它应该分析每个数据包的 header 以确定目标客户端:该线程还访问路由表以正确转发数据包。
如何处理传入的消息? 我可以为每个连接使用一个共享队列或一个输入队列:
- 如果我使用单个共享队列,路由线程和处理客户端连接的线程将同时访问它;
- 如果我为每个输入连接使用一个输入队列,路由线程和处理来自客户端的连接的唯一线程将同时访问它。
在第一种情况下,路由线程的作用相当简单,因为它只应从队列中取出下一个数据包并将其转发给另一个客户端。相反,在第二种情况下,路由线程应该一个接一个地检查所有输入队列。第二种方法的优点是可以避免最快的连接填满共享队列,从而增加其他连接发现队列已满的可能性。
第二种方法要求路由线程应遵循确保与输入队列相关的公平行为的策略。在这种情况下可以使用什么策略?
此外,还有哪些其他原因可能导致人们选择第一种或第二种解决方案?两种解决方案的优缺点是什么?
最佳答案
The routing of incoming packets could be achieved by a single thread
为什么要有线程?为什么不使用一个方法,由接收线程调用,将结果消息放入目标客户端的写入队列中?
关于c++ - 网络应用程序有多少传入缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332016/